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
原创粉丝点击