2017-04-20 5 views
0

Ist es möglich, den gleichen Adapter in zwei Aktivitäten für unterschiedliche Arbeiten Hier ist mein RecyclerAdapter: Der einzige Unterschied, wenn aus zwei Aktivitäten aufrufen, ist in dieser Zeile: Von Activity1. Java ist:Wie man den gleichen Adapter in zwei Aktivitäten auf verschiedene Arten verwendet

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

Und von Activity2.java

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

Alle anderen Code ist der gleiche, wie ich denselben Adapter für verschiedene andere Arbeit verwenden können.

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); 
    } 
} 
} 

Antwort

1
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); 
    } 
} 
} 

diesen Code Versuchen. Wenn Sie jetzt Ihren RecyclerAdapter in Activity1 erstellen, rufen Sie den RecyclerAdapter (arrayList, 0) auf und erstellen Sie Ihren RecyclerAdapter in Activity2 rufen Sie RecyclerAdapter (arrayList, 1) auf. Sie übergeben nur eine Variable in den Konstruktor, damit Ihr Adapter weiß, in welcher Aktivität er sich befindet, und je nach Aktivität unterschiedliche Logik ausführen kann.

Verwandte Themen