当前位置:首页 > 行业动态 > 正文

android gridview控件的使用

Android 控件GridView简介

GridView是Android开发中非常常用的一个控件,它是一个二维网格视图,可以用来展示列表数据,GridView的使用非常简单,只需要设置一些基本属性,如适配器、布局管理器等,就可以轻松实现数据的展示,本文将通过一个简单的案例,详细讲解如何使用GridView控件。

创建一个简单的GridView示例

1、在项目的res/layout目录下创建一个名为activity_main.xml的布局文件,用于放置GridView控件,在这个布局文件中,我们只需要添加一个GridView控件,并设置其基本属性。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <GridView
        android:id="@+id/gridView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numColumns="3"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

2、接下来,在项目的src/main/java目录下创建一个名为MainActivity.java的Java类文件,用于处理与GridView相关的逻辑,在这个类文件中,我们需要完成以下几个步骤:

(1)初始化一个简单的数据列表;

(2)创建一个适配器,用于将数据列表绑定到GridView上;

(3)在主线程中设置适配器;

(4)为GridView添加点击事件监听器,实现点击单元格时的操作。

实现GridView的数据绑定和点击事件监听

1、在MainActivity.java中,首先初始化一个简单的数据列表:

public class MainActivity extends AppCompatActivity {
    private String[] data = {"苹果", "香蕉", "橙子", "梨子", "葡萄", "草莓", "西瓜", "柠檬", "芒果", "菠萝", "火龙果"};

2、创建一个适配器类MyAdapter,继承自BaseAdapter,用于将数据列表绑定到GridView上:

public class MyAdapter extends BaseAdapter {
    private Context context;
    private String[] data;
    private int[] imageIds;
    public MyAdapter(Context context, String[] data) {
        this.context = context;
        this.data = data;
    }
    @Override
    public int getCount() {
        return data.length;
    }
    @Override
    public Object getItem(int position) {
        return data[position];
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.grid_item, null);
            viewHolder = new ViewHolder();
            viewHolder.textView = convertView.findViewById(R.id.text);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.textView.setText(data[position]);
        return convertView;
    }
}

3、在MainActivity.java的onCreate方法中,创建一个适配器实例,并在主线程中设置适配器:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    GridView gridView = findViewById(R.id.gridView);
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);
    Handler handler = new Handler(Looper.getMainLooper()); // 注意这里需要使用主线程处理UI操作
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            gridView.setAdapter(adapter); // 在主线程中设置适配器,避免出现ANR问题(Android无响应)
        }
    };
    handler.post(runnable); // 将任务提交给主线程处理,确保UI更新在主线程中执行完毕,注意这里的handler是针对主线程的,所以不需要担心线程安全问题,如果没有Handler,也可以使用其他方式实现线程切换,比如使用AsyncTask,但是需要注意的是,AsyncTask已经被弃用,现在推荐使用Kotlin协程或者RxJava等异步框架,还需要注意的是,如果在子线程中直接修改UI元素,可能会导致ANR问题,在子线程中对UI元素进行修改时,需要先将修改结果回调到主线程中执行,在本例中,我们使用了Handler来实现线程切换。
0