<学习笔记>Android ListView 通过指定position改变item颜色

来源:互联网 发布:音乐视觉效果软件 编辑:程序博客网 时间:2024/04/29 17:30

ListView中点击每个item是可以通过setOnItemClickListener获取到View和position改变颜色的,也可以直接设置某个item为setSelection()选中状态来改变背景色。

但是如果我并不想设置item为选中,也不想通过点击item,而单纯只是想通过item在listview中的位置改改颜色呢?又或许我其它逻辑需要BlaBla。。。

通过ListView的getChildAt()勉强可以通过position获取到View来变色,但是众所周知getChildAt()只能获取到listView中可见的视图,对于那些out of屏幕的item怎么办?我给的position可是在整个ListView中的位置,可不只是可见视图中的位置啊。

没办法,只有重写Adapter的getView方法了。

基本思路:

1.在数据中添加一个boolean成员来判断用哪种颜色,例如isblue(蓝色?)

2.覆盖getView()。在getView()中根据isblue的值来设置item的背景颜色为蓝色或白色

3.每当我需要改变颜色时,改变数据中的isblue值,并且用Adapter的notifyDataSetChange()刷新数据

protected ListView mListView;protected SimpleAdapter mAdapter;protected List<Map<String,Object>> mList = new ArrayList<>();protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mListView = (ListView) findViewById(R.id.leftDrawerList);        mAdapter = new SimpleAdapter(this,mList,                R.layout.list_leftdrawer,                new String[]{"title","info"},                new int[]{R.id.leftDrawerTitle,R.id.leftDrawerInfo}){            //重写getView方法,判断list中的Map是否为focus Map,如果是则背景蓝色,不是则背景白色            //通过修改mList中键值isfocus的值来修改focus item的背景色,mList中的数据变化后,调用mAdapter的notifyDataSetChanged方法可运行getView修改颜色            @Override            public View getView(int position, View convertView, ViewGroup parent) {                View view = super.getView(position, convertView, parent);                Boolean isFocus = (Boolean) mList.get(position).get("isfocus");                if(isFocus){                    view.setBackgroundColor(Color.BLUE);                }else{                    view.setBackgroundColor(Color.WHITE);                }                return view;            }        };        mListView.setAdapter(mAdapter);
}public void addDataToList(){//初始的item的isfocus都为false,背景色全为白色for(int i=0;i<10;i++){Map<String, Object> map = new HashMap<String, Object>();        map.put("title", i);        map.put("info", "第"+i);        map.put("isfocus", false);        mList.add(map);}mAdapter.notifyDataSetChanged();}//改变指定position的item背景色为蓝色,即设isfocus为truepublic void setItemBGColorBlue(int position){    mList.get(position).put("isfocus", true);    mAdapter.notifyDataSetChanged();}//改变指定position的item背景色为白色,即设isfocus为falsepublic void setItemBGColorWhite(int position){    mList.get(position).put("isfocus", false);    mAdapter.notifyDataSetChanged();}
大概如上,其它xml resource文件不再赘述,listview的用法不再赘述,不知道自己去Android developer看。

0 0
原创粉丝点击