是否可以在两个活动中为不同的不同工作调用相同的适配器
这是我的RecyclerAdapter:
从两个活动调用时的唯一区别是在此行中:从Activity1.java中是:

        holder.Name.setText(arrayList.get(position).getName());


从Activity2.java

        holder.Name.setText(arrayList.get(position).getVehicle());


所有其他代码都是相同的,如何将同一适配器用于不同的工作。

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {

private ArrayList<Contact> arrayList= new ArrayList<>();

public RecyclerAdapter(ArrayList<Contact> arrayList){

    this.arrayList= arrayList;

}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view,parent,false);

    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder (MyViewHolder holder, int position) {

    holder.Name.setText(arrayList.get(position).getName());
    int sync_status = arrayList.get(position).getSync_status();
    if(sync_status== DbContact.SYNC_STATUS_OK){
        holder.Sync_Status.setImageResource(R.drawable.success);

    }
    else {
        holder.Sync_Status.setImageResource(R.drawable.stopwatch);
    }

}

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

public static class MyViewHolder extends RecyclerView.ViewHolder{

    ImageView Sync_Status;
    TextView Name;

    public MyViewHolder(View itemView) {
        super(itemView);
        Sync_Status=(ImageView)itemView.findViewById(R.id.imgSync);
        Name=(TextView)itemView.findViewById(R.id.txtName);
    }
}
}

最佳答案

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {

private ArrayList<Contact> arrayList= new ArrayList<>();
private int whichActivity;

public RecyclerAdapter(ArrayList<Contact> arrayList, int activity){
    whichActivity = activity;
    this.arrayList= arrayList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view,parent,false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder (MyViewHolder holder, int position) {
    if(whichActivity == 0) {
        holder.Name.setText(arrayList.get(position).getName());
    }
    else {
        holder.Name.setText(arrayList.get(position).getVehicle());
    }
    int sync_status = arrayList.get(position).getSync_status();
    if(sync_status== DbContact.SYNC_STATUS_OK){
        holder.Sync_Status.setImageResource(R.drawable.success);

    }
    else {
        holder.Sync_Status.setImageResource(R.drawable.stopwatch);
    }

}

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

public static class MyViewHolder extends RecyclerView.ViewHolder{

    ImageView Sync_Status;
    TextView Name;

    public MyViewHolder(View itemView) {
        super(itemView);
        Sync_Status=(ImageView)itemView.findViewById(R.id.imgSync);
        Name=(TextView)itemView.findViewById(R.id.txtName);
    }
}
}


试试这个代码。现在,当您在Activity1中创建RecyclerAdapter时,请调用new RecyclerAdapter(arrayList,0),而当您在Activity2中创建RecyclerAdapter时,请调用new RecyclerAdapter(arrayList,1)。您只是将变量传递给构造函数,因此您的适配器知道它处于哪个活动中,并且可以根据活动通过不同的逻辑运行。

10-07 22:13