Android超详细讲解组件AdapterView的使用
下面是针对这个话题的完整攻略:
Android超详细讲解组件AdapterView的使用
什么是AdapterView
AdapterView是Android中的一个基础组件,用于展示列表、网格等数据结构的UI组件,它可以通过Adapter来管理数据和视图的绑定关系,支持各种自定义的视图展示方式,是开发常用UI组件之一。
AdapterView的主要子类
Android中提供了多种AdapterView的子类,常用的有以下几种:
ListView
最常用的列表展示组件,用于展示具有固定单行或多行的多项数据。
GridView
网格展示组件,用于展示二维数据。
Spinner
下拉列表组件,用于展示从多个选项中选择一个数据。
Gallery
类似于ListView,不过展示方式为水平滚动的多行列表。
使用AdapterView的步骤
使用AdapterView的一般步骤如下:
- 准备要展示的数据,例如一个包含若干item的List等。
- 编写自定义的Adapter实现类,用于绑定数据和视图,并将该Adapter与AdapterView进行关联。
- 通过侦听器(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元素的交织展示,和自定义布局。