一、说明:RecyclerView能够灵活实现大数据集的展示,视图的复用管理比ListView更好,能够显示列表、网格、瀑布流等形式,且不同的ViewHolder能够实现item多元化的功能。
二、示例使用实现列表功能
1.首先创建两个activity(例如RecyclerViewActivity,LinearRecyclerViewActivity这两个activity),在这我把第一个看作A,第二个看作B
2.在A的布局文件中创建一个Button。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".recycleview.RecyclerViewActivity"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="列表视图"
android:id="@+id/btn_rv_linear"/>
</LinearLayout>
3.在这个布局文件(A)的activity的中找到该控件,使这个控件能跳转到
(B)的activity界面。
private Button mBtn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycle_view);
//声明控件
mBtn1 = findViewById(R.id.btn_rv_linear);
//实现跳转
mBtn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RecyclerViewActivity.this,LinearRecyclerViewActivity.class);
startActivity(intent);
}
});
}
三、在B布局文件中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rv_linear_main"
android:background="@color/Gray"/>
</RelativeLayout>
四、新建一个Adapter
//自己App的包名.
package com.example.myapp1.recycleview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapp1.R;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.LinearViewHolder> {
private Context mContext;//声明适配变量
private OnItemClickListener mListener;//声明接口
public RecyclerViewAdapter(Context context, OnItemClickListener listener){
//变量赋值
this.mContext = context;
this.mListener = listener;
}
@NonNull
@Override
public RecyclerViewAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//给变量适配布局
return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_recyclerlinear_item,parent,false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewAdapter.LinearViewHolder holder, int position) {
//设置内容
holder.textView.setText("LSQ How are you?");
//点击事件
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//接口调用
mListener.OnClick(position);
}
});
}
@Override
public int getItemCount() {
return 30;
}
//创建泛型
class LinearViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public LinearViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.tv_recycle_title);
}
}
//接口
public interface OnItemClickListener{
void OnClick(int pos);
}
}
五、在B的activity中实现RecyclerView
1.要实现RecycleView需要一个Adapter,因此在第四步新建了一个
2.实现如下:
public class LinearRecyclerViewActivity extends AppCompatActivity {
//声明控件
private RecyclerView mRvMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_recycler_view);
mRvMain = findViewById(R.id.rv_linear_main);
mRvMain.setLayoutManager(new LinearLayoutManager(LinearRecyclerViewActivity.this));
//添加分割线
mRvMain.addItemDecoration(new MyDecoration());
mRvMain.setAdapter(new RecyclerViewAdapter(LinearRecyclerViewActivity.this, new RecyclerViewAdapter.OnItemClickListener() {
@Override
public void OnClick(int pos) {
Toast.makeText(LinearRecyclerViewActivity.this,"click"+pos,Toast.LENGTH_SHORT).show();
}
}));
}
//这是实现分割线的一种方法
class MyDecoration extends RecyclerView.ItemDecoration{
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(0,0,0,getResources().getDimensionPixelOffset(R.dimen.DividerHeight));
}
}
}