動態改變Listview的item背景顏色和item中字型的顏色
阿新 • • 發佈:2019-01-22
這是我的第一篇博文,如有什麼不妥的地方請大家多多包涵,好了,進入今天的主題,前段時間有個朋友問了我一個效果,該效果的具體實現是點選Listview,然後Listview中的item項的背景顏色和item項中字型的顏色的變化,即點選item改變他們的顏色並記錄下來.好了,表達能力可能需要提高現在我先給大家截一個最終效果圖:
效果圖如上.
具體程式碼如下:
<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.
功能比較簡單,高手路過看看就好.寫的不好大家不要噴我,下次還會改進.