GridView实现选中状态

前言:为了自己的未来,我们无怨无悔
最近做一个游戏选中的功能,需要用到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的状态,最后刷新适配器。

效果如下图:

本次文章就到这里了,希望对大家有帮助,也同时是我学习的一个历程和进步。

猜你喜欢

转载自blog.csdn.net/weixin_38364803/article/details/79701429