Android初级教程_保留listview item的选中样式
来源:互联网 发布:买家怎么进淘宝试衣间 编辑:程序博客网 时间:2024/06/05 16:28
最近工作中需要实现"保存listview item的选中样式"的功能,这样当用户点击某个条目去查看详细信息,返回时可以知道上次查看了哪个条目.
现在把自己的研究成果共享给大家,共同进步!
一开始以为该功能很是简单,
首先新建一个Activity:
@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);ArrayList<String> list = new ArrayList<String>();for (int i = 1; i <= 20; i++) {list.add("item " + i);}ListView listView = (ListView) findViewById(R.id.listview);listView.setAdapter(new MyAdapter(list));listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {TextView item = (TextView) view;item.setBackgroundResource(R.drawable.bg_article_listview_item_pressed);//把当前选中的条目加上选中效果if (last_item != -1 && last_item != position) {//如果已经单击过条目并且上次保存的item位置和当前位置不同// oldView.setBackgroundColor(Color.WHITE);oldView.setBackgroundResource(R.drawable.article_listview_item_bg);//把上次选中的样式去掉}oldView = item;//把当前的条目保存下来last_item = position;//把当前的位置保存下来}});}
新建相应的Adapter
private final class MyAdapter extends BaseAdapter {TextView textView = null;private ArrayList<String> list = null;public MyAdapter(ArrayList<String> list) {this.list = list;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {textView = new TextView(ListViewDemoActivity.this);} else {textView = (TextView) convertView;}if (last_item == position) {//解决滑动listview的时候,选中的条目选中效果消失问题textView.setBackgroundResource(R.drawable.bg_article_listview_item_pressed);} else {textView.setBackgroundResource(R.drawable.article_listview_item_bg);}textView.setText(list.get(position));textView.setTextSize(50);return textView;}}
然后就是相应的布局文件和selector文件了:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" /></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/bg_article_listview_item_pressed" android:state_selected="true"></item> <item android:drawable="@drawable/bg_article_listview_item_pressed" android:state_pressed="true"></item> <!-- <item android:drawable="@drawable/bg_article_listview_item_pressed" android:state_focused="true"></item> --> <item android:drawable="@android:color/transparent"></item></selector>
运行结果:
当listview没有上下滑动的时候是正常,当上下滑动的时候,选中其他条目的时候,上一个条目的选中效果不会消失,那么就出现了两个条目同时出现的.如下图所示:
出现上面的情况就是找不到原因,逻辑本来就是那样的,后来就在网上找到了相关的程序,
但是他选中的时候是用颜色来作为背景的,我是用selector xml文件实现的,难道就是这个原因吗?
后来我把所有的都设置都改成了颜色值,发现真的没有问题.但是我想这没有道理 啊,后来我看看我网上找的那个程序是怎么写的,发现在main.xml文件中多了一行这样的配置:
并且背景使用selector作为, 之后运行成功.
本文中的例子程序下载地址:http://download.csdn.net/detail/johnny901114/4464975
本例子参考的网上程序下载地址:http://download.csdn.net/detail/johnny901114/4464984
欢迎转载,转载请注明出处http://blog.csdn.net/johnny901114/article/details/7802763,谢谢! 如果还有其他问题欢迎留言..
0 0
- Android初级教程_保留listview item的选中样式
- Android 保留listview item的选中样式
- 关于Android的ListView的Item选中
- android-多个listview菜单数据点击item项保留选中状态问题
- 删除ListView选中的item
- android listview设置选中时的item的背景色
- Android ListView 高亮显示选中的item
- Android的ListView子Item选中改变TextView字体颜色
- android listview item 加载不同的布局样式文件
- Android 自定义ListView格局和各Item的样式
- android listview item 定义不同样式的布局
- android listview item定义不同的样式布局
- android listview item定义不同的样式布局
- android listview item定义不同的样式布局
- android listview item定义不同的样式布局
- Android listview设置多个不同的item样式
- android 设置listview item选中背景色
- android 设置listview item选中背景色
- Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/sc
- bind双网卡
- Linux进程间通信-基于内存(共享队列)
- ERROR: invalid page header in block 13760 of relation base/16995/67484
- No.06 Xcode(5.1.x) UINavigationController
- Android初级教程_保留listview item的选中样式
- Android下获取各种存储目录
- UUID/UDID/
- grep in Windows
- C++大学基础教程_11_10_实例研究:String类
- UVA 10561 - Treblecross(博弈SG函数)
- 启动tomcat报错 java.lang.Exception: Socket bind failed
- 使用JMX监控Tomcat
- Reverse Linked List II Java