本文已参与「新人创作礼」活动,一起开启掘金创作之路。
RecycleView 的简单使用
RecyclerView是Android一个更强大的控件,他的出现替代了 ListView 和 GridView。其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。RecyclerView可以自定义布局管理器来决定item的排布规则 如下;
LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager 等。
可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。
效果图
RecyclerView的用法
1.在Gradle添加RecyclerView的依赖
implementation 'com.android.support:recyclerview-v7:27.1.1'
2.activity_main.xml中的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="序号" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="名字" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="动作" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycleview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
2.Person实体类 源码中有
3.RecyclerAdapter适配器
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private List<Person> PersonList;
public RecyclerAdapter(List<Person> PersonList)
{
this.PersonList = PersonList;
}
@NonNull
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
ViewHolder viewHolder = new ViewHolder(itemView);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerAdapter.ViewHolder holder, int position) {
holder.id.setText(String.valueOf(PersonList.get(position).getId()));
holder.name.setText(PersonList.get(position).getName());
holder.action.setText(PersonList.get(position).getAction());
}
@Override
public int getItemCount() {
return PersonList.size();
}
//定义接口 有参数的点击事件
public interface OnItemClickListener{
void onClick(int position);
}
private OnItemClickListener listener;
public void setOnItemClickListener(OnItemClickListener listener){
this.listener=listener;
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView id;
TextView name;
TextView action;
public ViewHolder(@NonNull View itemView)
{
super(itemView);
this.id= itemView.findViewById(R.id.tv_id);
this.name= itemView.findViewById(R.id.tv_name);
this.action= itemView.findViewById(R.id.tv_action);
}
}
}
MainActivity 代码
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerAdapter recyclerAdapter;
private List<Person> personList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
}
//添加数据
private void initData() {
personList=new ArrayList<>();
personList.add(new Person(1,"anmin","敲代码"));
personList.add(new Person(2,"张三","出差"));
personList.add(new Person(3,"join","吃饭"));
personList.add(new Person(4,"李四","睡觉"));
personList.add(new Person(5,"jack","打豆豆"));
}
//初始化
private void initView(){
recyclerView = findViewById(R.id.recycleview);
// 线性布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
//网格布局加载器
/* StaggeredGridLayoutManager manager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);//防止滑动时跳动*/
//适配器
recyclerAdapter = new RecyclerAdapter(personList);
recyclerView.setAdapter(recyclerAdapter);
}
}
以上就是整个recycleview的流程
下面是源码地址 链接: link.