当前位置: 代码迷 >> Android >> 承袭ArrayAdapter,重写getView时,convertView setTag与holder里addTextChangedListener同时存在出错
  详细解决方案

承袭ArrayAdapter,重写getView时,convertView setTag与holder里addTextChangedListener同时存在出错

热度:90   发布时间:2016-05-01 18:04:19.0
继承ArrayAdapter,重写getView时,convertView setTag与holder里addTextChangedListener同时存在出错
写了一个用gridView弄的课程表,因为item要可编辑,所以item里就一个EditText;
继承ArrayAdapter,ViewHolder只有EditText edit一个成员。
下面是getView 部分内容
ViewHolder holder = null;
if (convertView ==null){
holder = new ViewHolder();
LayoutInflater mInflater = LayoutInflater.from(context);
convertView = mInflater.inflate(R.layout.grid_item, null);
holder.edit = (EditText)convertView.findViewById(R.id.edit);
holder.edit.setTag(position);
class MyEditWatcher implements TextWatcher{
public MyEditWatcher(ViewHolder holder){
mHolder = holder;
}
private ViewHolder mHolder;
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
int pos = (Integer)mHolder.edit.getTag();
objects.set(pos, s.toString());
}

public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub

}

public void onTextChanged(CharSequence s, int start,
int before, int count) {
// TODO Auto-generated method stub

}

}
  holder.edit.addTextChangedListener(new MyEditWatcher(holder));
convertView.setTag(holder);
holder.edit.setText(objects.get(position).toString());
System.out.println("Suceed!");
经过测试,是在红色字体部分出错的,问题应该是出在MyEditWatche上,求高手帮忙解决一下,谢谢!

------解决方案--------------------
07-13 13:52:53.065: E/AndroidRuntime(936): java.lang.ClassCastException: hill.Gridtest.EditTextAdapter$ViewHolder cannot be cast to java.lang.Integer
07-13 13:52:53.065: E/AndroidRuntime(936): at hill.Gridtest.EditTextAdapter$1MyEditWatcher.afterTextChanged(EditTextAdapter.java:59)

很明显,你在不同的地方,给 mHolder.edit 分别set了 ViewHolder和Integer类型 的tag
------解决方案--------------------
学会调试很重要,既然提示你说整形转换失败,在
int pos = (Integer)mHolder.edit.getTag();
前面加一行
Log.i("调试", "Tag=" + mHolder.edit.getTag() + "。");

然后将输出结果发上来看一下。
  相关解决方案