Android中GridView实现长按多选功能

本文介绍如何在Android中为GridView添加长按多选功能,通过示例代码展示实现步骤,包括MainActivity.java的设置、Adapter的配置以及activity_main.xml和image.xml的布局设计。在实现过程中遇到的问题是CheckBox在多选模式下无法选中,解决方案是在xml根布局添加android:descendantFocusability="blocksDescendants"来避免事件冲突。
摘要由CSDN通过智能技术生成

前言:GridView可用于展示多行多列的统一格式数据,但本身没有多选操作。现通过一系列代码实现GridView的长按多选操作,可以先看一个示例图。
这里写图片描述
以下是实现该功能的主要代码:
MainActivity.java

package com.mygridview;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.GridView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {
   
    private ActionBar actionBar;
    private Button btnCancel, btnDel, btnSelectAll, btnClear;
    private RelativeLayout headerLayout;
    private TextView numText;
    private GridView gridView;
    private ArrayList<HashMap<String, Object>> items; //每一个item
    private ArrayList<Boolean> selectItems; //用于存储已选中项目的位置
    private MyAdapter adapter;
    private boolean isState;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        actionBar = getSupportActionBar();
        actionBar.setTitle("GridView");

        numText = (TextView) findViewById(R.id.number);

        btnCancel = (Button) findViewById(R.id.btn_cancel);
        btnDel = (Button) findViewById(R.id.btn_del);
        btnSelectAll = (Button) findViewById(R.id.btn_select_all);
        btnClear = (Button) findViewById(R.id.btn_clear);
        btnCancel.setOnClickListener(this);
        btnDel.setOnClickListener(this);
        btnSelectAll.setOnClickListener(this);
        btnClear.setOnClickListener(this);

        headerLayout = (RelativeLayout) findViewById(R.id.header);
        gridView = (GridView) findViewById(R.id.grid_view);
        items = new ArrayList<>();
        selectItems = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            HashMap<String, Object> item = new HashMap<>();
            item.put("image", R.drawable.image);
            items.add(item);
        }
        adapter = new MyAdapter(this, items, R.layout.image, new String[]{
  "image"}, new int[]{R.id.my_image});
        gridView.setAdapter(adapter);
        gridView.setOnItemClickListener(this);
        gridView.setOnItemLongClickListener(this);

    }

    public ArrayList<Boolean> getSelectItems() {
        return selectItems;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_cancel :
                selectItems.clear();
                numText.setText("已选择1项");
                adapter.setIsState(false);
                setState(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值