要实现Android的列表可以使用ListView,也可以使用GridView,不过RecyclerView却可以同时实现这两种效果。
RecyclerView的库需要引用,有两种方法:
这里选择第一个
然后搜索recyclerview,记得小写。然后点击它,等待
还有一种一种方法比较简单,打开grade文件
添加这一行代码:compile'com.android.support:recyclerview-v7:23.0.1'
这里需要注意的是,你的RecyclerView的版本不能高于appcompat的版本,要不然会编译失败
然后点击编译按钮,等待
以后做Android开发需要导入第三方依赖库也是用这两种方法。
RecyclerView和listView一样,也需要适配器,新建一个类继承自RecyclerView,如果你你列表中的单个板块包含多个view,可以使用泛型ViewHolder。
先新建一个item_recycler.xml文件,来决定每一个item的布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="4dp" android:orientation="vertical"> <TextView android:id="@+id/tv_item_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="24sp" android:text="标题" /> <TextView android:id="@+id/tv_item_context" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="内容" android:textSize="20sp"/> <Button android:id="@+id/btn_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮"/> </LinearLayout>
接下来来创建它的适配器,MyRecyclerAdapter.java
//要实现它的三个方法 onCreateViewHolder、onBindViewHolder、getItemCount public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> { //title的值 private ArrayList<String> titleList = new ArrayList<String>(); //context的值 private ArrayList<String> contextList = new ArrayList<String>(); private Context context; //创建构造器 public MyRecyclerAdapter(Context context,ArrayList<String> titleList,ArrayList<String> contextList){ this.titleList = titleList; this.contextList = contextList; this.context = context; } //创建ViewHolder,导入视图 @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler,parent,false); MyViewHolder holder = new MyViewHolder(view); return holder; } //绑定视图 @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tvTitle.setText(titleList.get(position)); holder.tvContext.setText(contextList.get(position)); //设置Button的点击事件 holder.btnItem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,"点击了按钮",Toast.LENGTH_SHORT).show(); } }); } //获取item的数量 @Override public int getItemCount() { return titleList.size(); } //移除操作 public void removeItem(int position){ titleList.remove(position); contextList.remove(position); notifyDataSetChanged(); } //添加操作也就很简单了,传入新的标题和内容,调用notifyDataSetChanged()方法 //使用ViewHolder内部类,来完成view的绑定,进行RecyclerView的优化,不必每一个item都去findViewById class MyViewHolder extends RecyclerView.ViewHolder { TextView tvTitle; TextView tvContext; Button btnItem; public MyViewHolder(final View itemView) { super(itemView); tvTitle = (TextView) itemView.findViewById(R.id.tv_item_title); tvContext = (TextView) itemView.findViewById(R.id.tv_item_context); btnItem = (Button) itemView.findViewById(R.id.btn_item); //这里可以设置每一个item的点击事件,也可以使用接口回调实现点击事件,大家可以查一下 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } } }
接下来是在MainActivity里面进行RecyclerView的设置
public class MainActivity extends AppCompatActivity { private ArrayList<String>titleList = new ArrayList<String>(); private ArrayList<String>contextList = new ArrayList<String>(); private RecyclerView recyclerView; private MyRecyclerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); recyclerView = (RecyclerView) findViewById(R.id.recycler_main); //下面manger为设置RecyclerView的布局方式,可以任选一个 LinearLayoutManager manager = new LinearLayoutManager(this); //设置横向滑动(需要设置item_recycler.xml的宽),默认纵向滑动 manager.setOrientation(LinearLayoutManager.HORIZONTAL); //设置瀑布流,第一个参数表示列数,第二个表示布局方向 StaggeredGridLayoutManager lauoutmanager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(manager); adapter = new MyRecyclerAdapter(this,titleList,contextList); recyclerView.setAdapter(adapter); } private void init(){ titleList.add("标题一"); titleList.add("标题二"); titleList.add("标题三"); titleList.add("标题一"); titleList.add("标题二"); titleList.add("标题三"); titleList.add("标题一"); titleList.add("标题二"); titleList.add("标题三"); contextList.add("文本内容一"); contextList.add("文本内容二"); contextList.add("文本内容三"); contextList.add("文本内容一"); contextList.add("文本内容二"); contextList.add("文本内容三"); contextList.add("文本内容一"); contextList.add("文本内容二"); contextList.add("文本内容三"); } }
RecyclerView默认是没有分割线的,可以自己实现ItemDecoration类,如果你为了简便,推荐使用CardView,方便好看