求大佬帮找bug

小熊熊HELLO 2017-08-14 07:50:22
代码。。。。想实现一个类似聊天的界面,结果点两下发送就崩了,第一次显示的还是默认的。。。找了好久没找到错误。。。求大佬帮帮忙。。。
这是Adapter
public class ChartListAdaoter extends BaseAdapter {
private Context mContext;
private List<ChartLsitData> chartLsitDatas;
private LayoutInflater inflater;
private ChartLsitData data;
private static final int left_type=1;
private static final int right_type=2;

public ChartListAdaoter(Context mContext,List<ChartLsitData> chartLsitDatas ) {
this.chartLsitDatas=chartLsitDatas;
inflater=LayoutInflater.from(mContext);
}

@Override
public int getCount() {
return chartLsitDatas.size();
}

@Override
public Object getItem(int position) {
return chartLsitDatas.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type=getItemViewType(position);
leftViewHolder leftViewHolder = null;
rightViewHolder rightViewHolder=null;
if (convertView==null){
switch (type){
case left_type:
leftViewHolder=new leftViewHolder();
convertView=inflater.inflate(R.layout.left,null);
leftViewHolder.textView_left=(TextView) convertView.findViewById(R.id.left_tv);
convertView.setTag(leftViewHolder);
break;
case right_type:
rightViewHolder=new rightViewHolder();
convertView=inflater.inflate(R.layout.right,null);
rightViewHolder.textView_right=(TextView) convertView.findViewById(R.id.right_tv);
convertView.setTag(convertView);
break;
}
}else {
switch (type){
case left_type:
leftViewHolder= (leftViewHolder) convertView.getTag();
break;
case right_type:
rightViewHolder= (rightViewHolder) convertView.getTag();
break;
}

switch (type){
case left_type:
leftViewHolder.textView_left.setText(data.getText());
break;
case right_type:
rightViewHolder.textView_right.setText(data.getText());
break;
}
}

return convertView;
}
//获取type
@Override
public int getItemViewType(int position) {
data=chartLsitDatas.get(position);
int view_type=data.getType();
return view_type;
}

@Override
public int getViewTypeCount() {
return 3;
}
}
class leftViewHolder{

public TextView textView_left;
}
class rightViewHolder{
public TextView textView_right;
}

这是界面的代码
public class ButlreFragment extends Fragment implements View.OnClickListener{

private ListView chartliseView;
private ChartListAdaoter adapter;
private EditText message_et;
private Button Send_bu;
private ChartLsitData chartLsitData;
private List<ChartLsitData> chartLsitDatas;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.butlerlayout, container, false);
chartLsitDatas=new ArrayList<>();
findView(view);
return view;

}

public void findView(View view) {
chartliseView= (ListView) view.findViewById(R.id.chartliseView);
message_et= (EditText) view.findViewById(R.id.message_et);
Send_bu= (Button) view.findViewById(R.id.Send_bu);
Send_bu.setOnClickListener(this);
adapter=new ChartListAdaoter(getActivity(),chartLsitDatas);
chartliseView.setAdapter(adapter);
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.Send_bu:
String str=message_et.getText().toString();

if (!TextUtils.isEmpty(str)){
chartLsitData=new ChartLsitData();
chartLsitData.setType(2);
chartLsitData.setText(str);
chartLsitDatas.add(chartLsitData);
//通知adapter刷新
adapter.notifyDataSetChanged();
//滚动到底部
chartliseView.setSelection(chartliseView.getBottom());
String URL="http://apis.juhe.cn/mobile/get?phone="+str+"&key=7fbf0ce17daa9a2ca31626fa7c97407b";
RxVolley.get(URL, new HttpCallback() {
@Override
public void onSuccess(String t) {
L.i(t.toString());
prasingJSON(t);
super.onSuccess(t);
}
});

}else {
Toast.makeText(getActivity(),"你是真的懒",Toast.LENGTH_LONG).show();
}
break;
}
}

private void prasingJSON(String t) {
try {
JSONObject jsonObject=new JSONObject(t);
JSONObject jsonResult = jsonObject.getJSONObject("result");
String name= jsonResult.getString("province");
chartLsitData=new ChartLsitData();
chartLsitData.setText(name);
chartLsitData.setType(1);
chartLsitDatas.add(chartLsitData);
//通知adapter刷新
adapter.notifyDataSetChanged();
//滚动到底部
chartliseView.setSelection(chartliseView.getBottom());
} catch (JSONException e) {
e.printStackTrace();
}
}
}

左对话框布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher" />

<TextView
android:id="@+id/left_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/button_style"
android:text="我是textview" />
</LinearLayout>

</LinearLayout>

右边类似
效果这样。。。
当我点发送没显示数字,却显示了默认的。再点一次程序就崩了
跪求大神帮我看一眼。不胜感激
...全文
198 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小熊熊HELLO 2017-08-15
  • 打赏
  • 举报
回复
引用 6 楼 xw13782513621 的回复:
[quote=引用 5 楼 qq_35427176 的回复:] [quote=引用 4 楼 xw13782513621 的回复:] [quote=引用 3 楼 qq_35427176 的回复:] [quote=引用 1 楼 xw13782513621 的回复:] @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); leftViewHolder leftViewHolder = null; rightViewHolder rightViewHolder = null; if (convertView == null) { switch (type) { case left_type: leftViewHolder = new leftViewHolder(); convertView = inflater.inflate(R.layout.left, null); leftViewHolder.textView_left = (TextView) convertView.findViewById(R.id.left_tv); convertView.setTag(leftViewHolder); break; case right_type: rightViewHolder = new rightViewHolder(); convertView = inflater.inflate(R.layout.right, null); rightViewHolder.textView_right = (TextView) convertView.findViewById(R.id.right_tv); convertView.setTag(rightViewHolder); break; } } else { switch (type) { case left_type: leftViewHolder = (leftViewHolder) convertView.getTag(); break; case right_type: rightViewHolder = (rightViewHolder) convertView.getTag(); break; } } switch (type) { case left_type: leftViewHolder.textView_left.setText(data.getText()); break; case right_type: rightViewHolder.textView_right.setText(data.getText()); break; } return convertView; }
多谢大哥!!!!但是我仔细比对发现跟我写的一样啊。。。。我哪里错了???还请指教啊[/quote] 最后一个switch你放括号里了,也就是说新建的textView不会赋值,所以内容显示默认的 第一个switch的右边布局你convertView.setTag(convertView);写错了,所以后面取得时候类型转不了,程序就崩了 [/quote]原来如此。。。您是怎么看出来的。。。我看了一个多小时愣是没发现。。。[/quote] 看你描述的现象去猜啊。。。。其实应该去看log的,那个应该更快吧 光看代码,而且还是自己写的很难找的[/quote]嗯嗯多谢
江三木洛 2017-08-14
  • 打赏
  • 举报
回复
引用 5 楼 qq_35427176 的回复:
[quote=引用 4 楼 xw13782513621 的回复:] [quote=引用 3 楼 qq_35427176 的回复:] [quote=引用 1 楼 xw13782513621 的回复:] @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); leftViewHolder leftViewHolder = null; rightViewHolder rightViewHolder = null; if (convertView == null) { switch (type) { case left_type: leftViewHolder = new leftViewHolder(); convertView = inflater.inflate(R.layout.left, null); leftViewHolder.textView_left = (TextView) convertView.findViewById(R.id.left_tv); convertView.setTag(leftViewHolder); break; case right_type: rightViewHolder = new rightViewHolder(); convertView = inflater.inflate(R.layout.right, null); rightViewHolder.textView_right = (TextView) convertView.findViewById(R.id.right_tv); convertView.setTag(rightViewHolder); break; } } else { switch (type) { case left_type: leftViewHolder = (leftViewHolder) convertView.getTag(); break; case right_type: rightViewHolder = (rightViewHolder) convertView.getTag(); break; } } switch (type) { case left_type: leftViewHolder.textView_left.setText(data.getText()); break; case right_type: rightViewHolder.textView_right.setText(data.getText()); break; } return convertView; }
多谢大哥!!!!但是我仔细比对发现跟我写的一样啊。。。。我哪里错了???还请指教啊[/quote] 最后一个switch你放括号里了,也就是说新建的textView不会赋值,所以内容显示默认的 第一个switch的右边布局你convertView.setTag(convertView);写错了,所以后面取得时候类型转不了,程序就崩了 [/quote]原来如此。。。您是怎么看出来的。。。我看了一个多小时愣是没发现。。。[/quote] 看你描述的现象去猜啊。。。。其实应该去看log的,那个应该更快吧 光看代码,而且还是自己写的很难找的
小熊熊HELLO 2017-08-14
  • 打赏
  • 举报
回复
引用 4 楼 xw13782513621 的回复:
[quote=引用 3 楼 qq_35427176 的回复:] [quote=引用 1 楼 xw13782513621 的回复:] @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); leftViewHolder leftViewHolder = null; rightViewHolder rightViewHolder = null; if (convertView == null) { switch (type) { case left_type: leftViewHolder = new leftViewHolder(); convertView = inflater.inflate(R.layout.left, null); leftViewHolder.textView_left = (TextView) convertView.findViewById(R.id.left_tv); convertView.setTag(leftViewHolder); break; case right_type: rightViewHolder = new rightViewHolder(); convertView = inflater.inflate(R.layout.right, null); rightViewHolder.textView_right = (TextView) convertView.findViewById(R.id.right_tv); convertView.setTag(rightViewHolder); break; } } else { switch (type) { case left_type: leftViewHolder = (leftViewHolder) convertView.getTag(); break; case right_type: rightViewHolder = (rightViewHolder) convertView.getTag(); break; } } switch (type) { case left_type: leftViewHolder.textView_left.setText(data.getText()); break; case right_type: rightViewHolder.textView_right.setText(data.getText()); break; } return convertView; }
多谢大哥!!!!但是我仔细比对发现跟我写的一样啊。。。。我哪里错了???还请指教啊[/quote] 最后一个switch你放括号里了,也就是说新建的textView不会赋值,所以内容显示默认的 第一个switch的右边布局你convertView.setTag(convertView);写错了,所以后面取得时候类型转不了,程序就崩了 [/quote]原来如此。。。您是怎么看出来的。。。我看了一个多小时愣是没发现。。。
江三木洛 2017-08-14
  • 打赏
  • 举报
回复
引用 3 楼 qq_35427176 的回复:
[quote=引用 1 楼 xw13782513621 的回复:] @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); leftViewHolder leftViewHolder = null; rightViewHolder rightViewHolder = null; if (convertView == null) { switch (type) { case left_type: leftViewHolder = new leftViewHolder(); convertView = inflater.inflate(R.layout.left, null); leftViewHolder.textView_left = (TextView) convertView.findViewById(R.id.left_tv); convertView.setTag(leftViewHolder); break; case right_type: rightViewHolder = new rightViewHolder(); convertView = inflater.inflate(R.layout.right, null); rightViewHolder.textView_right = (TextView) convertView.findViewById(R.id.right_tv); convertView.setTag(rightViewHolder); break; } } else { switch (type) { case left_type: leftViewHolder = (leftViewHolder) convertView.getTag(); break; case right_type: rightViewHolder = (rightViewHolder) convertView.getTag(); break; } } switch (type) { case left_type: leftViewHolder.textView_left.setText(data.getText()); break; case right_type: rightViewHolder.textView_right.setText(data.getText()); break; } return convertView; }
多谢大哥!!!!但是我仔细比对发现跟我写的一样啊。。。。我哪里错了???还请指教啊[/quote] 最后一个switch你放括号里了,也就是说新建的textView不会赋值,所以内容显示默认的 第一个switch的右边布局你convertView.setTag(convertView);写错了,所以后面取得时候类型转不了,程序就崩了
小熊熊HELLO 2017-08-14
  • 打赏
  • 举报
回复
引用 1 楼 xw13782513621 的回复:
@Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); leftViewHolder leftViewHolder = null; rightViewHolder rightViewHolder = null; if (convertView == null) { switch (type) { case left_type: leftViewHolder = new leftViewHolder(); convertView = inflater.inflate(R.layout.left, null); leftViewHolder.textView_left = (TextView) convertView.findViewById(R.id.left_tv); convertView.setTag(leftViewHolder); break; case right_type: rightViewHolder = new rightViewHolder(); convertView = inflater.inflate(R.layout.right, null); rightViewHolder.textView_right = (TextView) convertView.findViewById(R.id.right_tv); convertView.setTag(rightViewHolder); break; } } else { switch (type) { case left_type: leftViewHolder = (leftViewHolder) convertView.getTag(); break; case right_type: rightViewHolder = (rightViewHolder) convertView.getTag(); break; } } switch (type) { case left_type: leftViewHolder.textView_left.setText(data.getText()); break; case right_type: rightViewHolder.textView_right.setText(data.getText()); break; } return convertView; }
多谢大哥!!!!但是我仔细比对发现跟我写的一样啊。。。。我哪里错了???还请指教啊
蒙子瑜 2017-08-14
  • 打赏
  • 举报
回复
先把错误日志粘贴出来啊
江三木洛 2017-08-14
  • 打赏
  • 举报
回复
@Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); leftViewHolder leftViewHolder = null; rightViewHolder rightViewHolder = null; if (convertView == null) { switch (type) { case left_type: leftViewHolder = new leftViewHolder(); convertView = inflater.inflate(R.layout.left, null); leftViewHolder.textView_left = (TextView) convertView.findViewById(R.id.left_tv); convertView.setTag(leftViewHolder); break; case right_type: rightViewHolder = new rightViewHolder(); convertView = inflater.inflate(R.layout.right, null); rightViewHolder.textView_right = (TextView) convertView.findViewById(R.id.right_tv); convertView.setTag(rightViewHolder); break; } } else { switch (type) { case left_type: leftViewHolder = (leftViewHolder) convertView.getTag(); break; case right_type: rightViewHolder = (rightViewHolder) convertView.getTag(); break; } } switch (type) { case left_type: leftViewHolder.textView_left.setText(data.getText()); break; case right_type: rightViewHolder.textView_right.setText(data.getText()); break; } return convertView; }

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧