当前位置:   article > 正文

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

u-list-item 背景颜色

这是我的第一篇博文,如有什么不妥的地方请大家多多包涵,好了,进入今天的主题,前段时间有个朋友问了我一个效果,该效果的具体实现是点击Listview,然后Listview中的item项的背景颜色和item项中字体的颜色的变化,即点击item改变他们的颜色并记录下来.好了,表达能力可能需要提高现在我先给大家截一个最终效果图:


效果图如上.
具体代码如下:

  1. <span style="font-size:24px;">package leoli.com.focuslistview;
  2. import android.graphics.Color;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.AdapterView;
  9. import android.widget.BaseAdapter;
  10. import android.widget.LinearLayout;
  11. import android.widget.ListView;
  12. import android.widget.TextView;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. public class MainActivity extends AppCompatActivity {
  16. private ListView mListView;
  17. private List<String> list=new ArrayList<String>();
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22. mListView= (ListView) this.findViewById(R.id.listview);
  23. for (int i=0;i<10;i++){
  24. list.add("你好"+i);
  25. }
  26. final MyAdapter adapter=new MyAdapter();
  27. mListView.setAdapter(adapter);
  28. mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  29. @Override
  30. public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
  31. adapter.setCurrentItem(i);
  32. adapter.setClick(true);
  33. adapter.notifyDataSetChanged();
  34. }
  35. });
  36. }
  37. class MyAdapter extends BaseAdapter{
  38. private int mCurrentItem=0;
  39. private boolean isClick=false;
  40. @Override
  41. public int getCount() {
  42. return list.size();
  43. }
  44. @Override
  45. public Object getItem(int i) {
  46. return list.get(i);
  47. }
  48. @Override
  49. public long getItemId(int i) {
  50. return i;
  51. }
  52. @Override
  53. public View getView(int i, View view, ViewGroup viewGroup) {
  54. if (view==null){
  55. view= LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item,null);
  56. }
  57. TextView textView= (TextView) view.findViewById(R.id.test);
  58. LinearLayout parent= (LinearLayout) view.findViewById(R.id.ll_parent);
  59. textView.setText(list.get(i));
  60. if (mCurrentItem==i&&isClick){
  61. parent.setBackgroundColor(Color.parseColor("#3F51B5"));
  62. textView.setTextColor(Color.parseColor("#ff6600"));
  63. }else{
  64. parent.setBackgroundColor(Color.parseColor("#ffffff"));
  65. textView.setTextColor(Color.parseColor("#000000"));
  66. }
  67. return view;
  68. }
  69. public void setCurrentItem(int currentItem){
  70. this.mCurrentItem=currentItem;
  71. }
  72. public void setClick(boolean click){
  73. this.isClick=click;
  74. }
  75. }
  76. }

下面我来讲解一下具体的实现原因:
我们都知道,Listview每生成一个item都会执行一次getview().所以我们在Adapter中加入了两个字段,这两个字段是用来判断当前的item的position和该item有无被点击的.mCurrentItem的初始值为0,所以在不断执行getview()时就进行了各个item项的position与mCurrentItem进行对比.最后通过if语句来执行对比后的设置.在我们的Activity中,我们调用了Adapter中的两个对外开放的方法分别是设置点击事件和设置当前的item项的position.最后再调用Adapter的notifyDatasetChanged().刷新Listview.
功能比较简单,高手路过看看就好.写的不好大家不要喷我,下次还会改进.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/170836?site
推荐阅读
相关标签
  

闽ICP备14008679号