写了一个用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() + "。");
然后将输出结果发上来看一下。