2017-04-20 87 views
0

是否可以在两种活动中为不同的工作调用相同的适配器 以下是我的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); 
    } 
} 
} 

回答

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

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

相关问题