在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,如果讀者有什麼更好的建議,可以在評論區提出,我將認真學習和接納,謝謝。