ListView中子项内怎么访问? 我的ListView里面使用Xml来做子项子项里面有一个Button和一个TextView是自定义一个DetailAdapter,在这个里面通过mInflater.inflate(xml文件)绑定在这里的getView()里定义的Button的Click方法,我想在这个事件去修改TextView的值,怎么做?在网上找了很久,还是没有找到合适的办法,希望各位大哥帮帮忙!!!谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (TextView) listview.getChildAt(i).findViewById( R.id.TextViewScore);这个应该可以吧 这里有个挺好的总结,当时我弄ListView+Button的时候就在这儿学习的。http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 6楼说的那个,我看过,跟我这种情况不同。谢谢。但是。我这种情况究竟该怎么弄呀?很奇怪呀。。我修改了源以后再DetailAdapter.this.notifyDataSetChanged();也没有反应 自定义的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要的是这个情况吗 8楼的兄弟我的是你这种情况但是,你把 final ViewHolder holder = null; 修改为final后,还可以修改?你这个能编译通过吗? 不好意思我原来的holder.title.setText("Title Text");写在别的地方,刚才改的时候按照提示直接加了final后没去改其他的错。确实不能再复制。你把holder定义成类变量试试,这样不用final在onClick里面也能用了 额。。这样呀。。我刚刚试了一下,可以改!但是改的不是当前那个Item的TextView的值。是最后一个子项的值。比如我一个ListView有100个子项,能显示出来的有10个,我点第一个item中的Button,却修改了第十个TextView的值 把TextView 设成Button 的tag,或者 public void onClick(View v) {TextView textView = (TextView) v.getParent().findViewById(R.id.textview)textView.setText("Test"); } Button 如果数据不多的话就不用ViewHolder 每次都重新生成一个View返回,这样肯定行 在getView里做相应处理就行了。 先初始化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); } }); 上面错了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); } }); http://blog.csdn.net/aomandeshangxiao/article/details/6643831 看一下我的这个博客吧 对你应该有用。看明白 你的问题应该能够解决了。 14楼大哥这种方法,似乎有效果!不过,当我这个ListView滚动时,那个修改了的值又还原了。这说明我的这个ListView上的值本来就是通过数据库绑定,还是需要去修改数据源。不过,你的这个思路是对的,给了我很大的启发,谢谢你!!!18楼的兄弟,辛苦你了。感觉你的原理也差不多。。谢谢。 思路就更新数据源后,用 DetailAdapter.this.notifyDataSetChanged();就可以了。 像你这里,其实 把(Textview)title设置成final就行了 三本经典高清Android开发书籍分享 - 不需要积分(不收藏会后悔) 如何提取文件? findViewById返回Null AlarmManager播放英语咨询 关于android培训 新手求教,请大家帮我看段代码 HttpGet android实现由不规则图形拼合成的无缝的地图,且分区域可点击 apk应用也能发广播给android系统? android项目引用了google-play-service_lib,如何用ant打包 google.maps.LatLng这句话是google地图的什么东西啊?=====在线等哈 android JNI 读串口数据
R.id.TextViewScore);这个应该可以吧
http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html
谢谢。
但是。我这种情况究竟该怎么弄呀?很奇怪呀。。我修改了源以后再
DetailAdapter.this.notifyDataSetChanged();
也没有反应
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要的是这个情况吗
我的是你这种情况但是,你把 final ViewHolder holder = null; 修改为final后,还可以修改?你这个能编译通过吗?
不好意思我原来的holder.title.setText("Title Text");写在别的地方,刚才改的时候按照提示直接加了final后没去改其他的错。确实不能再复制。你把holder定义成类变量试试,这样不用final在onClick里面也能用了
或者
public void onClick(View v)
{
TextView textView = (TextView) v.getParent().findViewById(R.id.textview)
textView.setText("Test");
}
Button
如果数据不多的话就不用ViewHolder 每次都重新生成一个View返回,这样肯定行
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);
}
});
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);
}
});
这说明我的这个ListView上的值本来就是通过数据库绑定,还是需要去修改数据源。
不过,你的这个思路是对的,给了我很大的启发,谢谢你!!!
18楼的兄弟,辛苦你了。感觉你的原理也差不多。。谢谢。