2016-07-07 325 views
0

是否有任何方法使用的OnClickListener将当前项目列表转移到新的Activity?或者其他方式?从ViewHolder获取RecyclerView.Adapter列表

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的应可解析或序列化,但现在的Android建议实行解析的,那么你可以通过意图通过任何POJO,你怎么可以让你的类可分析检查这个环节。 https://developer.android.com/reference/android/os/Parcelable.html intent.putExtra(键,串行化/ Parcelable),然后在第二活动getParcelableExtra(键)/ getSerializableExtra(键)

0

我已经Serializable对象:

公共类使用SendObject实现Serializable {

private List<Event> events; 

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

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

}

的主要问题是,以接收电流适配器列表。这个问题通过使用Singleton来解决。解决方案很简单。

公共类RVAdapter扩展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); 
      } 
     }); 
    } 
} 

无论如何,感谢您的答复!