2016-07-07 5 views
0

現在のアイテムリストを新しいActivityに転送する方法はありますかOnClickListenerViewHolderを使用していますか?それとも他の方法ですか?RecyclerView.AdapterリストをViewHolderから取得する

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

答えて

0

解決方法1:あなたがあなたのリストを渡しているViewHolderでメソッドを作成

解決方法2:静的でないクラスとしてごViewHolderを定義し、

に別のアプローチをあなたのリストを渡します。

// 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

アダプタクラス。

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

}

あなたの活動のインターフェイスを実装します。

@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

あなたのPOJOは、解析可能なまたは直列化されたが、現在はアンドロイド必要があり、あなたは、あなたがこのリンクをチェックし、あなたのクラスが解析可能にすることができますどのように、意図による任意のPOJOを渡すことができます解析可能な実装することをお勧めします。 https://developer.android.com/reference/android/os/Parcelable.html intent.putExtra(キー、シリアライズ/ Parcelable)と、第2の活性getParcelableExtra(キー)/ getSerializableExtra(キー)

0

Iはすでに直列化オブジェクトを有していた:

パブリッククラスをSendObjectがシリアライズ{

を実装
private List<Event> events; 

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

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

}

主な問題は、現在のアダプタのリストを受信することでした。この問題は、Singletonを使用することで解決されます。解決策は簡単でした。

パブリッククラスRVAdapterは

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

とにかくRecyclerView.Adapter {

を拡張し、ご回答に感謝します!

関連する問題