使用GridView時想實現點擊其中的一個Item,該Item改變背景,再次點擊Item變回原來的背景,網上搜了很多資料都沒有看到類似的案例,但還是有所啟發,現來分享我的做法。
首先,首先為GridView自定義adapter適配器,繼承BaseAdapter類。
實現效果的重要因素如下,為item設置一個標記點擊狀態的數組。
public class gridAdapter extends BaseAdapter { final itemLength = 16; private LayoutInflater layoutInflater; private List<String> gridDataList = new ArrayList<>(); private int clickTemp = -1;//標識被選擇的item private int[] clickedList=new int[itemLength];//這個數組用來存放item的點擊狀態 private Context c; gridAdapter(Context context){ c = context; layoutInflater = LayoutInflater.from(context); for (int i =0;i<itemLength;i++){ clickedList[i]=0; //初始化item點擊狀態的數組 } } ---------- 以下代碼省略 ---------- }
然后在定義的adapter中寫一個方法,用於識別當前被選擇的item
public void setSeclection(int posiTion) { clickTemp = posiTion; }
在setOnItemClickListener中.將點擊的Item位置通過setSeclection( )傳到adapter。
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { gridadapter.setSeclection(position); gridadapter.notifyDataSetChanged(); } });
接下來adapter中很重要的重載方法getView()。
@Override public View getView(int position, View convertView, ViewGroup parent) { //..................代碼省略 if(clickTemp==position){ //根據點擊的Item當前狀態設置背景 if (clickedList[position]==0){ convertView.setBackgroundColor(Color.BLUE); clickedList[position]=1; } else { convertView.setBackgroundColor(Color.TRANSPARENT); clickedList[position]=0; } } //..................代碼省略 }
提醒:不要忘了notifyDataSetChanged(),否則點擊效果不會顯示。
在修改適配器綁定的數據后,利用notifyDataSetChanged()刷新Item。
