Android超详细讲解组件AdapterView的使用

下面是针对这个话题的完整攻略:

Android超详细讲解组件AdapterView的使用

什么是AdapterView

AdapterView是Android中的一个基础组件,用于展示列表、网格等数据结构的UI组件,它可以通过Adapter来管理数据和视图的绑定关系,支持各种自定义的视图展示方式,是开发常用UI组件之一。

AdapterView的主要子类

Android中提供了多种AdapterView的子类,常用的有以下几种:

ListView

最常用的列表展示组件,用于展示具有固定单行或多行的多项数据。

GridView

网格展示组件,用于展示二维数据。

Spinner

下拉列表组件,用于展示从多个选项中选择一个数据。

Gallery

类似于ListView,不过展示方式为水平滚动的多行列表。

使用AdapterView的步骤

使用AdapterView的一般步骤如下:

  1. 准备要展示的数据,例如一个包含若干item的List等。
  2. 编写自定义的Adapter实现类,用于绑定数据和视图,并将该Adapter与AdapterView进行关联。
  3. 通过侦听器(Listener)等方式监听AdapterView的选中事件等。

下面将通过ListView进行示例展示。

示例一:ListView的基本使用

在Activity中设置ListView的基本使用代码如下:

public class MainActivity extends AppCompatActivity {

    private ArrayList<String> mDataList;
    private ListView mListView;

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

        initData();
        initView();
    }

    private void initData() {
        mDataList = new ArrayList<>();
        mDataList.add("item1");
        mDataList.add("item2");
        mDataList.add("item3");
    }

    private void initView() {
        mListView = findViewById(R.id.list_view);
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mDataList);
        mListView.setAdapter(adapter);
    }
}

其中,Android.R.layout.simple_list_item_1是一个简单的内置布局,用于展示一个TextView。

在该示例中,我们先准备数据(三个字符串),然后在initView()中创建一个ArrayAdapter实例,并将其设置到ListView中。此时,列表就会自动展示三个item的内容。

示例二:自定义ListView的实现

如果想对ListView进行更详细的自定义,可以通过实现BaseAdapter或其子类实现自定义Adapter。

下面是一个自定义Adapter的示例代码:

public class MyAdapter extends BaseAdapter {

    private ArrayList<String> mDataList;
    private LayoutInflater mInflater;

    public MyAdapter(Context context, ArrayList<String> mDataList) {
        this.mDataList = mDataList;
        this.mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return mDataList == null ? 0 : mDataList.size();
    }

    @Override
    public Object getItem(int i) {
        return mDataList == null ? null : mDataList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
        View view;
        ViewHolder holder;
        if (convertView == null) {
            view = mInflater.inflate(R.layout.item_list_view, null);
            holder = new ViewHolder();
            holder.mTextView = view.findViewById(R.id.text_view);
            view.setTag(holder);
        } else {
            view = convertView;
            holder = (ViewHolder) view.getTag();
        }
        holder.mTextView.setText(mDataList.get(i));
        return view;
    }

    static class ViewHolder {
        TextView mTextView;
    }
}

该示例中,我们对ListView的item进行了自定义,每个item展示一个TextView和ImageView,其中ImageView用于显示删除该item。

在该示例中,我们需要在layout中新增一个显示TextView和ImageView的布局文件item_list.xml,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <ImageView
        android:id="@+id/image_view"
        android:src="@android:drawable/ic_menu_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

在上面的代码中,我们定义了一个LinearLayout,水平方向展示一个TextView和一个ImageView。最后,在自定义Adapter中,我们将该布局文件inflate,并赋给ViewHolder中的相应控件。

完整的Activity代码如下:

public class MainActivity extends AppCompatActivity {

    private ArrayList<String> mDataList;
    private ListView mListView;

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

        initData();
        initView();
    }

    private void initData() {
        mDataList = new ArrayList<>();
        mDataList.add("item1");
        mDataList.add("item2");
        mDataList.add("item3");
    }

    private void initView() {
        mListView = findViewById(R.id.list_view);
        MyAdapter adapter = new MyAdapter(this, mDataList);
        mListView.setAdapter(adapter);
    }
}

通过上面的自定义Adapter,我们就可以展示更加复杂的ListView列表了,包括各种UI元素的交织展示,和自定义布局。

营销型网站