Android RecyclerView的用法
本博客代码地址:https://github.com/YoungTime/RecyclerViewTest 去往代码地址
要实现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,方便好看
上一篇: 详解TCP三次握手/四次挥手
下一篇: 单个view水平居中,垂直居中
推荐阅读
-
php中unlink()、mkdir()、rmdir()等的用法介绍
-
php中静态变量的基本用法
-
ThinkPHP中__initialize()和类的构造函数__construct()用法分析_php实例
-
php中理解print EOT分界符和echo EOT的用法区别小结_PHP教程
-
php去掉字符串的最后一个字符substr()的用法
-
Javascript中的转义用法实例代码_基础知识
-
PHP中redis的用法深入解析_PHP
-
Android 实现下划线能滑动的Tab标签页
-
DIV CSS display (block none inline)属性的用法_html/css_WEB-ITnose
-
latex的表格用法