Android初级教程_保留listview item的选中样式
2012-07-30 17:45 java线程例子 阅读(286) 评论(0) 编辑 收藏 举报最近工作中需要实现"保存listview item的选中样式"的功能,这样当用户点击某个条目去查看详细信息,返回时可以知道上次查看了哪个条目.
现在把自己的研究成果共享给大家,共同进步!
一开始以为该功能很是简单,
首先新建一个Activity:
@Override public 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() { @Override public 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; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public 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,谢谢! 如果还有其他问题欢迎留言..