在Android应用开发过程中,有一个控件——RecyclerView被越来越多的开发者们使用,原因是他在功能上不仅可以实现ListView的功能,还有GridView的功能,不仅可以纵向滚动还可以横向滚动,另外支持局部刷新,这些都是ListView控件无法实现的,因此在功能上大大强于ListView,所以已经取代ListView进行开发了。下面我们就来看看它的使用方式。
第一步先是在Gradle中添加相应地址,如下:
compile 'com.android.support:recyclerview-v7:25.1.1'
第二步就是在xml中添加UI:
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycleView"/>
第三步,创建相应bean文件,封装需要显示的数据:
package com.example.guoxiang.myapplication.bean;
/**
* Created by guoxiang on 2020/5/21.
*/
public class UserBean {
public UserBean(int drawable, String content) {
this.drawable = drawable;
this.content = content;
}
public int getDrawable() {
return drawable;
}
public void setDrawable(int drawable) {
this.drawable = drawable;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
private int drawable;
private String content;
}
目前的数据中只包含图片和文字,可以根据需要封装更多更复杂的数据类型
第四步,创建适配器layout,如下:
<?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="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tex"/>
</LinearLayout>
第五步,创建adapter适配器
package com.example.guoxiang.myapplication.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.guoxiang.myapplication.R;
import com.example.guoxiang.myapplication.bean.UserBean;
import java.util.List;
/**
* Created by guoxiang on 2020/5/21.
*/
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ViewHolder> {
private List<UserBean> lists;
public RecycleViewAdapter(List<UserBean> lists) {
this.lists = lists;
}
//如下方法是用于创建ViewHolder实例,并把加载的布局传入到构造函数去,再把ViewHolder实例返回。
@Override
public RecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.aaa,parent,false);
ViewHolder holder=new ViewHolder(view);
return holder;
}
//如下方法是得到显示列表的数目
@Override
public int getItemCount() {
return lists.size();
}
//如下方法是用于对子项的数据进行赋值,会在每个子项被滚动到屏幕内时执行。position得到当前项的UserBean实例。
@Override
public void onBindViewHolder(RecycleViewAdapter.ViewHolder holder, int position) {
if(lists!=null&&lists.size()>position) {
holder.img.setImageResource(lists.get(position).getDrawable());
holder.tex.setText(lists.get(position).getContent());
}
}
//创建ViewHolder对象,用于OnCreateViewHolder中返回使用
static class ViewHolder extends RecyclerView.ViewHolder{
ImageView img;
TextView tex;
public ViewHolder(View view){
super(view);
img=(ImageView)view.findViewById(R.id.img);
tex=(TextView)view.findViewById(R.id.tex);
}
}
}
第六步:
MainActivity中初始化RecyclerView,并加载RecycleViewAdapter
public class MainActivity extends AppCompatActivity implements View.OnClickListener,ViewImp{
private String url="https://www.baidu.com/img/bd_logo1.png";
private Button button;
private MyPresenter myPresenter;
private ImageView imageView;
private ProgressBar progressBar;
private RecyclerView mRecyclerView;
private List<UserBean> lists;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(this);
imageView=(ImageView)findViewById(R.id.imageView);
myPresenter=new MyPresenter(this);
progressBar=(ProgressBar)findViewById(R.id.progressBar);
//此处开始初始化适配器中的数据
initList();
//初始化RecyclerView
mRecyclerView=(RecyclerView)findViewById(R.id.recycleView);
//设置RecyclerView布局是线性
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(linearLayoutManager);
//添加适配器
RecycleViewAdapter adapter=new RecycleViewAdapter(lists);
mRecyclerView.setAdapter(adapter);
}
private void initList(){
lists=new ArrayList<>();
lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang"));
lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang1"));
lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang2"));
lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang3"));
lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang4"));
lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang5"));
}
至此整个的创建和数据的加载都已经完成,写的比较的简单,但是复杂的RecyclerView的创建都是从简单的去进行扩展的,希望看到的读者可以学习到一些基本的知识点,然后加以思考,做出更好更复杂的UI,如果读者有什么更好的建议,可以在评论区提出,我将认真学习和接纳,谢谢。