首页 > 代码库 > 动态改变Listview的item背景颜色和item中字体的颜色

动态改变Listview的item背景颜色和item中字体的颜色

首先非常感谢原文章作者。

今天项目用到Listview点击item变色。网上找了好久,都没有找到简单的方法,好像只能重写getview();

网上找到了一个比较简单的例子,但是不懂为什么,先记录下来以后慢慢学习。

<span style="font-size:24px;">package leoli.com.focuslistview;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {private ListView mListView;    private List<String> list=new ArrayList<String>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mListView= (ListView) this.findViewById(R.id.listview);        for (int i=0;i<10;i++){            list.add("你好"+i);        }        final MyAdapter adapter=new MyAdapter();        mListView.setAdapter(adapter);        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {               adapter.setCurrentItem(i);                adapter.setClick(true);              adapter.notifyDataSetChanged();            }        });    }    class MyAdapter extends BaseAdapter{        private int mCurrentItem=0;        private boolean isClick=false;        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int i) {            return list.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            if (view==null){                view= LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item,null);            }                      TextView textView= (TextView) view.findViewById(R.id.test);            LinearLayout parent= (LinearLayout) view.findViewById(R.id.ll_parent);            textView.setText(list.get(i));          if (mCurrentItem==i&&isClick){               parent.setBackgroundColor(Color.parseColor("#3F51B5"));                textView.setTextColor(Color.parseColor("#ff6600"));            }else{                parent.setBackgroundColor(Color.parseColor("#ffffff"));                textView.setTextColor(Color.parseColor("#000000"));            }            return view;        }      public void setCurrentItem(int currentItem){            this.mCurrentItem=currentItem;        }        public void setClick(boolean click){            this.isClick=click;        }    }}

下面是原文章的讲解:
我们都知道,Listview每生成一个item都会执行一次getview().所以我们在Adapter中加入了两个字段,这两个字段是用来判断当前的item的position和该item有无被点击的.mCurrentItem的初始值为0,所以在不断执行getview()时就进行了各个item项的position与mCurrentItem进行对比.最后通过if语句来执行对比后的设置.在我们的Activity中,我们调用了Adapter中的两个对外开放的方法分别是设置点击事件和设置当前的item项的position.最后再调用Adapter的notifyDatasetChanged().刷新Listview.

原文章链接:http://blog.csdn.net/qq_14813933/article/details/50417859

动态改变Listview的item背景颜色和item中字体的颜色