RecyclerView的adapter的实际使用方法

//这是平常的单条目(记得加布局管理器)
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Holder> implements View.OnClickListener {
private String[] mNames;
public MyAdapter(String[] names){
this.mNames = names;
}

@Override
public MyAdapter.Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(), R.layout.item, null);
view.setOnClickListener(this);
Holder holder = new Holder(view);
return holder;
}

@Override
public void onBindViewHolder(MyAdapter.Holder holder, int position) {
holder.text.setText(mNames[position]);
holder.itemView.setTag(position);
}

@Override
public int getItemCount() {
return mNames.length;
}


public class Holder extends RecyclerView.ViewHolder{

private final TextView text;

public Holder(View itemView) {
super(itemView);
text = itemView.findViewById(R.id.text_item);
}
}

public interface OnItemClick{
void setOnItemClick(View view,int position);
}

private OnItemClick onItemClick;

public void setOnItemClick(OnItemClick onItemClick) {
this.onItemClick = onItemClick;
}

@Override
public void onClick(View v) {
if (onItemClick != null){
onItemClick.setOnItemClick(v, (Integer) v.getTag());
}
}
}


//多条目写法(继承的RecyclerView.Adapter泛型发生改变,不去写死)
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MoreAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private String[] mNames;
private static final int ONE_ITEM = 0;
private static final int TWP_ITEM = 1;

public MoreAdapter(String[] mNames) {
this.mNames = mNames;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = null;
if (i == ONE_ITEM) {
view = View.inflate(viewGroup.getContext(), R.layout.one_item, null);
OneHolder holder = new OneHolder(view);
return holder;
} else {
view = View.inflate(viewGroup.getContext(), R.layout.two_item, null);
TwoHolder holder = new TwoHolder(view);
return holder;
}
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder instanceof OneHolder){
((OneHolder) viewHolder).text.setText(mNames[i]);
}else {
((TwoHolder) viewHolder).text2.setText(mNames[i]);
}
}

@Override
public int getItemCount() {
return mNames.length;
}

@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return ONE_ITEM;
} else {
return TWP_ITEM;
}
}

class OneHolder extends RecyclerView.ViewHolder {

private final TextView text;

public OneHolder(@NonNull View itemView) {
super(itemView);
text = itemView.findViewById(R.id.one_item);
}

}

class TwoHolder extends RecyclerView.ViewHolder {

private final TextView text2;

public TwoHolder(@NonNull View itemView) {
super(itemView);
text2 = itemView.findViewById(R.id.two_item);
}
}


}

//瀑布流写法

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.Random;

public class FlowAdapter extends RecyclerView.Adapter<FlowAdapter.MyHolder> {

private ArrayList<Integer> mList;
public FlowAdapter(ArrayList<Integer> list){
this.mList = list;
}

@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//因为瀑布流展示效果涉及到了它的父类
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2,parent,false);
MyHolder holder = new MyHolder(view);
return holder;
}

@Override
public void onBindViewHolder(MyHolder holder, int position) {
holder.mImage.setImageResource(mList.get(position));
//LayoutParams里面封装队友控件设置宽高,居中方式等等
ViewGroup.LayoutParams layoutParams = holder.itemView.getLayoutParams();
Random random = new Random();
int height = random.nextInt(400)+200;
layoutParams.height = height;
holder.itemView.setLayoutParams(layoutParams);
}

@Override
public int getItemCount() {
return mList.size();
}

public class MyHolder extends RecyclerView.ViewHolder {

private final ImageView mImage;

public MyHolder(View itemView) {
super(itemView);
mImage = itemView.findViewById(R.id.text2_item);
}
}
}

猜你喜欢

转载自www.cnblogs.com/fybb/p/10884762.html