写了一个用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上,求高手帮忙解决一下,谢谢!

解决方案 »

  1.   

    要发详细出错提示上来才知道什么原因另外,这句
    holder.edit.setText(objects.get(position).toString());
    最好要加上一个判断
    if(position<objects.size())
    {
    holder.edit.setText(objects.get(position).toString());
    }
      

  2.   

    在第一次使用getview时就已经出错了,另外一大堆runtime,第一个显示为ViewHolder不能转为Integer
    为此处:int pos = (Integer)mHolder.edit.getTag();但此处并无问题啊。
      

  3.   

    Integer不能直接赋值给int的,一个是对象,一个是基本数据类型
      

  4.   

    JDK1.5不是提供了拆装箱吗?
    可能我没说清楚,我遇到的情况是:
    单独的holder.edit.addTextChangedListener(new MyEditWatcher(holder));
    或者convertView.setTag(holder);
    都没有问题,但是两个同时存在就会出错。
    我觉得是tag里的holder里的edit中得textchangedlistener问题,settext会触发这个监听器。
      

  5.   

    log中的错误是什么?空指针?
      

  6.   

    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)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.TextView.sendAfterTextChanged(TextView.java:7591)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.TextView.setText(TextView.java:3268)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.TextView.setText(TextView.java:3110)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.EditText.setText(EditText.java:78)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.TextView.setText(TextView.java:3085)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at hill.Gridtest.EditTextAdapter.getView(EditTextAdapter.java:86)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.AbsListView.obtainView(AbsListView.java:2033)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.GridView.onMeasure(GridView.java:1026)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.View.measure(View.java:12603)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.View.measure(View.java:12603)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.View.measure(View.java:12603)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.View.measure(View.java:12603)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2072)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.View.measure(View.java:12603)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1044)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.os.Handler.dispatchMessage(Handler.java:99)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.os.Looper.loop(Looper.java:137)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at android.app.ActivityThread.main(ActivityThread.java:4340)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at java.lang.reflect.Method.invokeNative(Native Method)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at java.lang.reflect.Method.invoke(Method.java:511)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    07-13 13:52:53.065: E/AndroidRuntime(936):  at dalvik.system.NativeStart.main(Native Method)
      

  7.   

    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
      

  8.   

    我edit的settag是int类型,然后convertview settag了holder。
      

  9.   

    学会调试很重要,既然提示你说整形转换失败,在
    int pos = (Integer)mHolder.edit.getTag();
    前面加一行
    Log.i("调试", "Tag=" + mHolder.edit.getTag() + "。");然后将输出结果发上来看一下。