我的ListView里面使用Xml来做子项子项里面有一个Button和一个TextView是自定义一个DetailAdapter,在这个里面通过mInflater.inflate(xml文件)绑定在这里的getView()里定义的Button的Click方法,我想在这个事件去修改TextView的值,怎么做?
在网上找了很久,还是没有找到合适的办法,希望各位大哥帮帮忙!!!谢谢

解决方案 »

  1.   

    (TextView) listview.getChildAt(i).findViewById(
                            R.id.TextViewScore);这个应该可以吧
      

  2.   

    这里有个挺好的总结,当时我弄ListView+Button的时候就在这儿学习的。
    http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html
      

  3.   

    6楼说的那个,我看过,跟我这种情况不同。
    谢谢。
    但是。我这种情况究竟该怎么弄呀?很奇怪呀。。我修改了源以后再
    DetailAdapter.this.notifyDataSetChanged();
    也没有反应
      

  4.   

    自定义的DetailAdapter里面@Override
    public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
     final ViewHolder holder = null;  
     
     if (convertView == null) {    holder=new ViewHolder();    
     convertView = mInflater.inflate(inflateID, null);  
     holder.table = (Button)convertView.findViewById(R.id.tableLayout1);  
     holder.title = (TextView)convertView.findViewById(R.id.textView_title);  
     convertView.setTag(holder);  
     }else{  
     holder = (ViewHolder)convertView.getTag();  
     }
     holder.table.setOnClickListener(new OnClickListener(){ @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    holder.title.setText("Title Text");
    }
     });
       return convertView; 
    }

    private final class ViewHolder{  
    public Button table;
    public TextView title; }
    LZ要的是这个情况吗
      

  5.   

    8楼的兄弟
    我的是你这种情况但是,你把  final ViewHolder holder = null;  修改为final后,还可以修改?你这个能编译通过吗?
      

  6.   


    不好意思我原来的holder.title.setText("Title Text");写在别的地方,刚才改的时候按照提示直接加了final后没去改其他的错。确实不能再复制。你把holder定义成类变量试试,这样不用final在onClick里面也能用了
      

  7.   

    额。。这样呀。。我刚刚试了一下,可以改!但是改的不是当前那个Item的TextView的值。是最后一个子项的值。比如我一个ListView有100个子项,能显示出来的有10个,我点第一个item中的Button,却修改了第十个TextView的值
      

  8.   

    把TextView 设成Button 的tag,
    或者
     public void onClick(View v) 
    {
    TextView textView = (TextView) v.getParent().findViewById(R.id.textview)
    textView.setText("Test");
                    }
     Button
      

  9.   

     
    如果数据不多的话就不用ViewHolder 每次都重新生成一个View返回,这样肯定行
      

  10.   

    在getView里做相应处理就行了。
      

  11.   

    先初始化ViewHolder后再定义一个final ViewHolder赋值过去ViewHolder holder=new ViewHolder();  
     
     if (convertView == null) {    holder=new ViewHolder();    
     
     }else{  
     holder = (ViewHolder)convertView.getTag();  
     }
     final ViewHolder tempHolder=holder;
     convertView = mInflater.inflate(inflateID, null);  
     holder.table = (Button)convertView.findViewById(R.id.addToDictionary);  
     holder.title = (TextView)convertView.findViewById(R.id.addToDictionary);  
     convertView.setTag(holder);  
     holder.table.setOnClickListener(new OnClickListener(){ @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    tempHolder.title.setText("Title Text");
    // updateText(temp);
    }
     });
      

  12.   

    上面错了ViewHolder holder=new ViewHolder();  
     
     if (convertView == null) {    holder=new ViewHolder();    
     
     }else{  
     holder = (ViewHolder)convertView.getTag();  
     }
     final ViewHolder tempHolder=holder;
     convertView = mInflater.inflate(inflateID, null);  
     tempHolder.table = (Button)convertView.findViewById(R.id.addToDictionary);  
     tempHolder.title = (TextView)convertView.findViewById(R.id.addToDictionary);  
     convertView.setTag(tempHolder);  
     tempHolder.table.setOnClickListener(new OnClickListener(){ @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    tempHolder.title.setText("Title Text");
    // updateText(temp);
    }
     });
      

  13.   

    http://blog.csdn.net/aomandeshangxiao/article/details/6643831 看一下我的这个博客吧 对你应该有用。看明白 你的问题应该能够解决了。
      

  14.   

    14楼大哥这种方法,似乎有效果!不过,当我这个ListView滚动时,那个修改了的值又还原了。
    这说明我的这个ListView上的值本来就是通过数据库绑定,还是需要去修改数据源。
    不过,你的这个思路是对的,给了我很大的启发,谢谢你!!!
    18楼的兄弟,辛苦你了。感觉你的原理也差不多。。谢谢。
      

  15.   

    思路就更新数据源后,用 DetailAdapter.this.notifyDataSetChanged();就可以了。
      

  16.   

    像你这里,其实 把(Textview)title设置成final就行了