【问题标题】:Passing Arguments from RecyclerView items从 RecyclerView 项目传递参数
【发布时间】:2014-12-01 03:33:32
【问题描述】:

我有以下 RecyclerView 适配器。显示项目可以正常工作,但是当我单击其中一个项目时,我想将参数传递给对话框或片段:

 public class NovaAdapter extends RecyclerView.Adapter<NovaListRowHolder> {

ArrayList<HashMap<String, String>> novaList = new ArrayList<HashMap<String, String>>();
public static final String STATUS = "status";
public static final String NAME = "name";
public static final String ID = "id";
private Context mContext;

public NovaAdapter(Context context, ArrayList<HashMap<String, String>> novaList) {
    this.novaList = novaList;
    this.mContext = context;
}

@Override
public NovaListRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.instances_list, null);
    NovaListRowHolder mh = new NovaListRowHolder(v);
    return mh;
}

@Override
public void onBindViewHolder(NovaListRowHolder novaListRowHolder, int i) {

    HashMap<String, String> e = novaList.get(i);
    novaListRowHolder.name.setText(e.get(NAME));
    novaListRowHolder.status.setText(e.get(STATUS));
    novaListRowHolder.setId(e.get(ID));


}


@Override
public int getItemCount() {
    return (null != novaList ? novaList.size() : 0);
}class NovaListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
protected TextView name;
protected TextView status;
protected String id;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public NovaListRowHolder(View view) {
    super(view);
    view.setOnClickListener(this);
    this.name = (TextView) view.findViewById(R.id.nameInstance);
    this.status = (TextView) view.findViewById(R.id.statusInstance);

}

public void onClick(View view){
    Dialog dialog = new Dialog(view.getContext());
    dialog.setContentView(R.layout.instances_listdetail);
    dialog.setTitle("Details " + name.getText() + " " + getPosition());
    dialog.show();
}

此时点击只是打开一个占位符对话框,但它没有传递任何数据。我试图到处搜索有关如何做到这一点的示例或教程,但在任何地方都找不到。

抱歉,它太明显了,但这是我的第一个应用程序,我没有太多经验。

【问题讨论】:

    标签: android onclick arguments android-recyclerview


    【解决方案1】:

    您应该为每个视图设置onBindViewHolder 中的onClickListener。您可以直接从您的 viewHolder 访问 itemView。 现在,您可以使用单击侦听器为视图设置一个(或几个)标签,并在您的 onClick 方法中检索它们。

    【讨论】:

      【解决方案2】:

      如果您需要将值从recycler view 传递到dialog,则使用此方法

      onBindViewHolder的代码

      @Override
      public void onBindViewHolder(MyViewHolder holder, int position) {
          Offers offers = offersList.get(position);
          holder.topic.setText(offers.getTopic());
          holder.expiry.setText(offers.getExpiry());
      }
      

      只需传递 setText 的值

      //TextView inside dialog
       offers_dialog_topic = (TextView) dialog.findViewById(R.id.offers_dialog_offer_type);
       date_year = (TextView) dialog.findViewById(R.id.date_year);
      
       offers_dialog_topic.setText(topic.getText().toString());
       date_year.setText(expiry.getText().toString());
      

      希望这对其他人有所帮助。

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-12
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多