2016-07-07 60 views
0

Gibt es eine Möglichkeit, die aktuelle Liste der Elemente in eine neue Activity mit OnClickListener von ViewHolder zu übertragen? Oder anders?RecyclerView.Adapter-Liste von ViewHolder erhalten

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.EventsViewHolder> { 
    List<Event> events; //get this List 
    RVAdapter(List<Event> events) { 
     this.events = events; 
} 

public static class EventsViewHolder extends RecyclerView.ViewHolder { 

    TextView date; 
    TextView text; 
    ImageView photo; 

    EventsViewHolder(final View itemView) { 
     super(itemView); 
     date = (TextView) itemView.findViewById(R.id.date); 
     text = (TextView) itemView.findViewById(R.id.text); 
     photo = (ImageView) itemView.findViewById(R.id.photo); 
     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Context context = v.getContext(); 
       SendObject sendObject = new SendObject(setList); //and transfer it here 
       Intent intent = new Intent(context, ReadEvent.class); 
       Bundle bundle = new Bundle(); 
       bundle.putSerializable("events", sendObject); 
       bundle.putInt("pos", getAdapterPosition()); 
       bundle.putString("test", "test"); 
       intent.putExtras(bundle); 
       context.startActivity(intent); 
      } 
     }); 
    } 
} 

Antwort

0

Lösung 1: Create-Methode in ViewHolder, in dem Sie Ihre Liste

Lösung passieren 2: Definieren Sie Ihre ViewHolder als nicht statische Klasse und übergeben Sie Ihre Liste

Einen anderen Ansatz:

// Solution 1: 
    public class EventsViewHolder extends RecyclerView.ViewHolder { 

      EventsViewHolder(final View itemView) { 
       super(itemView); 
      } 

      public void bind(List<Event> events) { 
       ... 
       SendObject sendObject = new SendObject(events); //and transfer it here 
       ... 
      } 
     } 

    // Solution 2: 
    public class EventsViewHolder extends RecyclerView.ViewHolder { 
     EventsViewHolder(final View itemView) { 
      super(itemView); 
      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        SendObject sendObject = new SendObject(events); //and transfer it here 
       } 
      }); 
     } 
    } 
0

Adapterklasse.

public ServicesHomeAdapter(Context context, ArrayList<HomeScreenData> homeScreenDataArrayList,OnItemClickedListener listener) { 
    this.context=context; 
    this.homeScreenDataArrayList=homeScreenDataArrayList; 
    this.listener=listener; 
} 

@Override 
public ServicesHomeAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
{ 

    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_service,parent,false); 
    ViewHolder viewHolder=new ViewHolder(view); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(final ServicesHomeAdapter.ViewHolder holder, int position) { 

    final HomeScreenData homeScreenData = homeScreenDataArrayList.get(position); 

} 

@Override 
public int getItemCount() 
{ 
    return (null!=homeScreenDataArrayList?homeScreenDataArrayList.size():0); 
} 


public class ViewHolder extends RecyclerView.ViewHolder { 
    protected ImageView ivSection; 
    protected TextView txImageName; 


    public ViewHolder(View itemView) 
    { 
     super(itemView); 
     this.ivSection= (ImageView) itemView.findViewById(R.id.ivcard); 
     this.txImageName= (TextView) itemView.findViewById(R.id.txtimgname); 
     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       listener.onItemClicked(getAdapterPosition()); 
      } 
     }); 
    } 
} 

public interface OnItemClickedListener{ 
    void onItemClicked(int position); 
} 

}

die Schnittstelle in Ihrer Aktivität implementieren.

@Override 
public void onItemClicked(int position) { 
    Intent intent = new Intent(getActivity(), A.class); 
    Pojo Class pojo = arrayList.get(position); 
    intent.putExtra(TAG, pojo); 
    startActivity(intent); 

}` 
0

Ihre Pojo sollte parseable oder serialisierte aber jetzt android empfiehlt parseable zu implementieren, dann können Sie jede Pojo durch Absicht passieren, wie Sie Ihre Klasse parseable Check Link zu machen. https://developer.android.com/reference/android/os/Parcelable.html intent.putExtra (Schlüssel, Serializable/Parcel) und dann in der zweiten Aktivität getParcelableExtra (key)/getSerializableExtra (key)

0

hatte ich ein Serializable Objekt bereits:

public class Sendenobjekt implementiert Serializable {

private List<Event> events; 

public SendObject(List<Event> events) { 
    this.events = events; 
} 

public List<Event> getEvents() { 
    return events; 
} 

}

Das Hauptproblem war, die aktuelle Adapter List zu erhalten. Das Problem wird mit Singleton gelöst. Die Lösung war einfach.

public class RVAdapter erweitert RecyclerView.Adapter {

private static RVAdapter rvAdapter; 
private List<Event> events; 

public RVAdapter() { 
} 

public static RVAdapter getInstance() { 
    if (rvAdapter==null) { 
     rvAdapter = new RVAdapter(); 
    } 
    return rvAdapter; 
} 


public void setList(List<Event> events) { 
    this.events = events; 
} 

public static class EventsViewHolder extends RecyclerView.ViewHolder { 

    TextView date; 
    TextView text; 
    ImageView photo; 

    EventsViewHolder(final View itemView) { 
     super(itemView); 
     date = (TextView) itemView.findViewById(R.id.date); 
     text = (TextView) itemView.findViewById(R.id.text); 
     photo = (ImageView) itemView.findViewById(R.id.photo); 
     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Context context = v.getContext(); 
       SendObject sendObject = null; 
       sendObject = new SendObject(RVAdapter.getInstance().events); //current List 
       Intent intent = new Intent(context, ReadEvent.class); 
       Bundle bundle = new Bundle(); 
       bundle.putSerializable("events", sendObject); 
       bundle.putInt("pos", getAdapterPosition()); 
       intent.putExtras(bundle); 
       context.startActivity(intent); 
      } 
     }); 
    } 
} 

Trotzdem, vielen Dank für Ihre Antworten!