最近工作中需要实现"保存listview item的选中样式"的功能,这样当用户点击某个条目去查看详细信息,返回时可以知道上次查看了哪个条目.
现在把自己的研究成果共享给大家,共同进步!
一开始以为该功能很是简单,
首先新建一个Activity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList list = new ArrayList();
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 list = null;
public MyAdapter(ArrayList 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文件了:
当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,谢谢! 如果还有其他问题欢迎留言..