引入
implementation 'com.android.support:recyclerview-v7:27.1.1'
布局
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
Adapter
拓展Adapter類
public class SomeAdapter extends RecyclerView.Adapter<SomeAdapter.ViewHolder>
構(gòu)造函數(shù)
public SomeAdapter(Context context, List data){
this.context = context;
this.data = data;
if(this.data == null){
this.data = new ArrayList<>();
this.data.add("");
Toast.makeText(context, context.getString(R.string.load_error), Toast.LENGTH_SHORT).show();
}
}
寫靜態(tài)ViewHolder內(nèi)部類
public static class ViewHolder extends RecyclerView.ViewHolder{
TextView title;
public ViewHolder(View itemView){
super(itemView);
title = itemView.findViewById(R.id.textView_title);
}
}
重寫onCreateViewHolder(), onCreateViewHolder(), getItemCount()
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
View view = LayoutInflater.from(context).inflate(R.layout.item_some, parent,false);
return new ViewHolder(view);
}
@Override
public void onCreateViewHolder(final ViewHolder holder, final int pos){
holder.itemView.setOnClickListener( view -> {
if (onItemClickListener != null){
onItemClickListener.OnItemClick(holder.itemView, pos, "wocao");
}
});
holder.title.setText(R.string.test);
}
// 控制item顯示數(shù)量
@Override
public int getItemCount(){
return data.size();
}
完整版
public class SomeAdapter extends RecyclerView.Adapter<SomeAdapter.ViewHolder>{
private Context context;
private OnItemClickListener onItemClickListener;
private List data;
public SomeAdapter(Context context, List data){
this.context = context;
this.data = data;
if(this.data == null){
this.data = new ArrayList<>();
this.data.add("");
Toast.makeText(context, context.getString(R.string.load_error), Toast.LENGTH_SHORT).show();
}
}
//click事件接口
public interface OnItemClickListener{
void OnItemClick(View view, int pos, String url);
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
this.onItemClickListener = onItemClickListener;
}
public static class ViewHolder extends RecyclerView.ViewHolder{
TextView title;
public ViewHolder(View itemView){
super(itemView);
title = itemView.findViewById(R.id.textView_title);
}
}
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
View view = LayoutInflater.from(context).inflate(R.layout.item_some, parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int pos){
holder.itemView.setOnClickListener( view -> {
if (onItemClickListener != null){
onItemClickListener.OnItemClick(holder.itemView, pos, "wocao");
}
});
holder.title.setText(R.string.test);
}
@Override
public int getItemCount(){
return data.size();
}
}
UI中實例化并調(diào)用(Kotlin)
val mLayoutManager: RecyclerView.LayoutManager
mLayoutManager = GridLayoutManager(applicationContext, 1, LinearLayoutManager.VERTICAL, false)
val mAdapter = SomeAdapter(applicationContext, null)
mAdapter.setOnItemClickListener{ view, pos, url ->
Toast.makeText(this, url + pos, Toast.LENGTH_SHORT).show()
}
// 設(shè)置布局管理器
recyclerView.layoutManager = mLayoutManager
// 設(shè)置Item添加和移除的動畫
recyclerView.itemAnimator = DefaultItemAnimator()
// 設(shè)置adapter
recyclerView.adapter = mAdapter