ListView使用setTag与getTag控件之间关联
来源:互联网 发布:搜狗 数据挖掘 面试 编辑:程序博客网 时间:2024/05/06 01:43
ListView中点击一行,修改该行内部的ImageView的图片显示,不管点击哪一行修改的是最后一行的图片显示。可以使用setTag将该行布局与ImageView进行关联,通过getTag获取该行关联的ImageView实现更改点击行对应的ImageView。
public class MainActivity extends AppCompatActivity { private List<String> titleNames = new ArrayList<>(); private ListView lv_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initTitleNames(); lv_content = (ListView)findViewById(R.id.lv_content); MyAdapter adapter = new MyAdapter(); lv_content.setAdapter(adapter); } private void initTitleNames() { titleNames.add("a"); titleNames.add("b"); titleNames.add("c"); titleNames.add("d"); titleNames.add("e"); titleNames.add("f"); } class MyAdapter extends BaseAdapter { private ViewHolder viewHolder; @Override public int getCount() { return titleNames.size(); } @Override public Object getItem(int position) { return titleNames.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if(convertView == null){ convertView = View.inflate(MainActivity.this,R.layout.layout_item,null); viewHolder = new ViewHolder(); viewHolder.rl_content = (RelativeLayout)convertView.findViewById(R.id.rl_content); viewHolder.tv_name = (TextView)convertView.findViewById(R.id.tv_name); viewHolder.iv_setting = (ImageView)convertView.findViewById(R.id.iv_setting); <span style="color:#ff0000;"> <strong>viewHolder.rl_content.setTag(viewHolder.iv_setting);</strong></span> convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder)convertView.getTag(); } viewHolder.rl_content.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //更改选择条目id为iv_setting对应控件的图标 <strong><span style="color:#ff0000;">((ImageView)v.getTag()).setImageResource(R.mipmap.setting);</span></strong> } }); viewHolder.tv_name.setText(titleNames.get(position)); //默认当前身份处于选中状态 return convertView; } class ViewHolder{ public RelativeLayout rl_content; public TextView tv_name; public ImageView iv_setting; } }}布局文件layout_item.xml,如果这样写,还是会出现如下图所示的问题。
<pre style="font-family: 宋体; font-size: 9.8pt; background-color: rgb(255, 255, 255);"><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:background="#eeeeee"> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="Hello World!" /> <ImageView android:id="@+id/iv_setting" android:layout_width="40dp" android:layout_height="40dp" android:src="@mipmap/ic_launcher" android:layout_alignParentRight="true"/></RelativeLayout>
错误提示
<pre name="code" class="html" style="font-size: 13.0667px;">id是rl_content的布局不能是父布局,需要添加一个父布局。因为<span style="font-size: 13.0667px; font-family: Arial, Helvetica, sans-serif;">convertView就是rl_content,convertView既设置了Tag为</span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 13.0667px;">viewHolder,又设置了Tag为ImageView,所以转化出错。</span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 13.0667px;"></span><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:background="#eeeeee"> <RelativeLayout android:id="@+id/rl_content" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="Hello World!" /> <ImageView android:id="@+id/iv_setting" android:layout_width="40dp" android:layout_height="40dp" android:src="@mipmap/ic_launcher" android:layout_alignParentRight="true"/> </RelativeLayout></RelativeLayout>
0 0
- ListView使用setTag与getTag控件之间关联
- Listview中setTag()/getTag()
- setTag()与getTag()
- View setTag()与getTag();
- setTag()与getTag()
- setTag(Object)/getTag()使用
- Android之:View的setTag()与getTag()方法使用
- 用setTag()和getTag()来优化Listview
- setTag()/getTag()
- setTag()/getTag()
- setTag()/getTag()
- setTag()/getTag()
- setTag()/getTag()
- setTag()/getTag()
- Android setTag()与getTag(),与set多个setTag()
- Android setTag()与getTag(),与set多个setTag()
- View.setTag()与View.getTag()的作用
- View.setTag()与View.getTag()的作用
- Jenkins进阶系列之——03parameterized-trigger插件
- RevisionControl - RevisionControl概述
- cocos2d-x 3.x学习之MoveAction
- ccah-500 第40题 maintain your MRv1 TaskTracker slot capacities when you migrate. What should you do
- 【NGUI】通过射线检测被遮挡的物体
- ListView使用setTag与getTag控件之间关联
- FastDFS安装、配置、部署(一)-安装和部署
- 3、B/S结构和C/S结构的介绍
- 没有前九条的第十条编程规则:Greenspun's tenth rule
- Jenkins进阶系列之——04Publish Over FTP Plugin插件
- jQuery的.bind()、.live()和.delegate()之间区别
- Entity Framework 之 EntitySQL 复杂查询及函数
- Android 更换应用图标无效
- background-attachment:fixed在ios中失效