在安卓中实现列表的方式有几种,一个是ListView一个是GridView还有最新的RecycleView
一. 先来看一下ListView:
- 在布局文件中添加一个ListView,并添加一个id
- 准备数据,将数据添加到适配器Adapter中
- 在Activity中根据id找到ListView并设置适配器
- 监听item的点击事件
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,name); //name为定义的数组
mListView.setAdapter(myAdapter);
mListView.setOnItemClickListener(mMessageOnclick);
private AdapterView.OnItemClickListener mMessageOnclick = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Toast.makeText(MainActivity.this,"click"+position,Toast.LENGTH_SHORT).show();
}
};
适配器分两种:
- ArrayAdapter:当数据源为数组时使用此适配器
- SimpleCursorAdapter:当数据来自Cursor时使用
二. 官方文档指出,一种更加现代的显示大量数据并且高效率的使用方式是RecycleView,下面实现一个简单的RecycleView示例
-
添加引用(API28以前使用support库,API29以后推荐AndroidX)
implementation 'com.android.support:recyclerview-v7:29.0.0'
-
在activity_main.xml中添加RecycleView
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recycle_view" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> </androidx.recyclerview.widget.RecyclerView>
-
新建my_item_view.xml布局文件用来表示列表的每一行item的布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="28sp"/> </LinearLayout>
-
创建适配器MyAdapter.java
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private String[] mDataSet; public static class MyViewHolder extends RecyclerView.ViewHolder { public TextView textView; public MyViewHolder(View view) { super(view); textView = view.findViewById(R.id.textview); } } public MyAdapter(String[] mDataSet) { this.mDataSet = mDataSet; } //加载item的布局,并且创建ViewHolder实例 @Override public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_item_view, parent, false); MyViewHolder vh = new MyViewHolder(view); return vh; } //给item填充数据 @Override public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) { holder.textView.setText(mDataSet[position]); } //返回Item的个数 @Override public int getItemCount() { return mDataSet.length; } }
-
在MainActivity中进行使用使用RecycleView
public class MainActivity extends AppCompatActivity { private RecyclerView mRecycleView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; private String[] mDataSet; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDate(); //初始假数据 mRecycleView = findViewById(R.id.recycle_view); mRecycleView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL)); //设置水平分割线 mRecycleView.setLayoutManager(new LinearLayoutManager(this)); //recycleView必须要布局管理器 mAdapter = new MyAdapter(mDataSet); //实例化适配器 mRecycleView.setAdapter(mAdapter); //设置适配器 } private void initDate(){ mDataSet = new String[100]; for (int i = 0;i<100;i++){ mDataSet[i] = "This is item "+ i; } } }
上面是最简单基本的使用,效果如下:
可以看到RecycleView相比ListView使用更加复杂,但是功能也更加强大,对于大量数据显示或者数据变化比较大时使用RecycleView是一个不错的选择.