前言:为了自己的未来,我们无怨无悔
最近做一个游戏选中的功能,需要用到GridView,并且要实现选中状态。
1.首先:
xml布局里定义一个GridView:
<GridView
android:id="@+id/gridView"
android:listSelector="#00000000"
android:verticalSpacing="@dimen/space_s"
android:layout_marginTop="@dimen/space_m"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="2">
</GridView>
2.然后:
我们需要自定义一个GridView的适配器:
public class GridViewAdapter extends BaseAdapter {
private Context mContext;
private List<GameBean> gameList;
public GridViewAdapter(Context mContext, List<GameBean> gameList) {
this.mContext = mContext;
this.gameList = gameList;
}
@Override
public int getCount() {
return gameList.size();
}
@Override
public Object getItem(int i) {
return gameList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
final GameBean game = (GameBean) getItem(position);
ViewHolder viewHolder;
if(view == null){
view = View.inflate(mContext, R.layout.item_game,null);
viewHolder = new ViewHolder();
viewHolder.ll_game = view.findViewById(R.id.ll_game);
viewHolder.txt_first = view.findViewById(R.id.txt_num_one);
viewHolder.txt_second = view.findViewById(R.id.txt_num_two);
view.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) view.getTag();
}
if(game.isSelect()){
viewHolder.ll_game.setBackgroundResource(R.drawable.item_game_background);
}else {
viewHolder.ll_game.setBackgroundResource(R.drawable.item_game_background_unselect);
}
viewHolder.txt_first.setText(game.getFirstNum());
viewHolder.txt_second.setText(game.getSecondNum());
return view;
}
class ViewHolder{
LinearLayout ll_game;
TextView txt_first;
TextView txt_second;
}
}
看我定义的适配器,我的思路是设置一个状态在list<>集合传入的泛型里保存,每次点击GridView的item时进行判断,接着刷新适配器调用getView()方法,在方法里进行isSelect()的状态判断
private boolean isSelect;
public boolean isSelect() {
return isSelect;
}
3.接着:
来看主类里我是如何判断的
mAdapter = new GridViewAdapter(getContext(),mGameList);
mGridView.setAdapter(mAdapter);
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
for(int i = 0;i<mGameList.size();i++){
if(position == i){
mGameList.get(i).setSelect(true);
}else{
mGameList.get(i).setSelect(false);
}
}
mAdapter.notifyDataSetChanged();
}
});
}
这里我用到了for循环,每次点击GridView的item时,回调onItemClick()方法时,便循环设置所以item的状态,最后刷新适配器。
效果如下图:
本次文章就到这里了,希望对大家有帮助,也同时是我学习的一个历程和进步。