Recycler View中的意图?

时间:2015-01-02 17:10:52

标签: android android-intent onclick android-5.0-lollipop android-recyclerview

任何人都可以帮帮我!无法正常编写意图,以便在我的回收站视图中启动新活动!有必要这样做的新方法吗?任何帮助都将非常感激!

这是我的View Holder Code;

    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView title;
    ImageView icon;

    public MyViewHolder(View itemView, TextView textView) {
        super(itemView);
        title = (TextView) itemView.findViewById(R.id.listText);
        icon = (ImageView) itemView.findViewById(R.id.listImage);
        itemView.setOnClickListener(this);
        title = textView;
    }

    @Override
    public void onClick(View v) {
        if (getPosition() == 0) {
            Toast.makeText(v.getContext(), "Actvity 1", Toast.LENGTH_SHORT).show();
        }
        if (getPosition() == 1) {
            Toast.makeText(v.getContext(), "Actvity 2", Toast.LENGTH_SHORT).show();
        }
    }
  }
}

3 个答案:

答案 0 :(得分:7)

在viewHolder中初始点击监听器。

/**
 * see {@link <a href="https://youtu.be/imsr8NrIAMs?t=2163">Official Video</a>}
 */
public static class MyViewHolder extends RecyclerView.ViewHolder {

  public MyViewHolder(View itemView) {
    super(itemView);
    //TODO: findViewById or ButterKnife
    ....
    //set item view listener
    itemView.setOnClickListener(new View.OnClickListener() {
      @Override public void onClick(View itemView) {
        if (getAdapterPosition() != RecyclerView.NO_POSITION) {
          Context c = itemView.getContext();
          //TODO: startActivity
        }
      }
    });
    //TODO: set other child views' listener
    ....
  }
}

答案 1 :(得分:1)

在自定义适配器中创建自己的构造函数。 例如:

  private Context context;
    public MyRecyclerViewAdapter(Context context,ArrayList<String> yourList){
            this.context=context;
            // further code
    }

并且在调用适配器时只传递上下文的引用,现在您可以通过

调用intent

context.startActivity()&amp;所有其他方法。

答案 2 :(得分:0)

ViewHolder只是项目特定布局中内部View个对象的容器。它或您实施的RecyclerView.Adapter都无法直接访问发送Context所需的Intent对象。不要在此设置OnClickListener,而是将其放入适配器onBindViewHolder()。如果您的适配器附加了自己的RecyclerView,则会通知您,因此您可以在私有字段中保存对它的引用。从该视图中,您可以拨打getContext(),然后您可以创建Intent并通过常规方式发送。