【问题标题】:Go back to previous Activity with some `put extra` onClick of a recyclerView Item使用 recyclerView 项目的一些 `put extra` onClick 返回上一个 Activity
【发布时间】:2015-04-22 11:13:56
【问题描述】:

我想在 Recycler 视图中单击 Item 时传递数据先前活动并将其显示在 Edit Text 上。

这是我用来将数据从列表视图传递到上一个活动的代码

我想用 Recyclerview 做同样的事情

//调用第二个Activity

public static final int REQUEST_CODE = 100;
Intent dateintent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(dateintent, REQUEST_CODE);

//listview的onClick将数据传回之前的activity

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView txt = (TextView) view.findViewById(R.id.textView);
                String str = txt.getText().toString();

                Intent intent = new Intent();
                intent.putExtra("data",str);
                setResult(RESULT_OK,intent);
                finish();

            }

});

//获取数据后在第一个活动编辑框中显示数据

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            String data= data.getStringExtra("data");
            if (data!= null) {
                edittext.setText(data);
            }
        }
    }

}

【问题讨论】:

  • 将数据从一个活动传递到我尝试过的上一个活动,当我单击列表视图项时,数据将被传递回上一个活动文本框。我想使用回收站视图做同样的事情

标签: java android android-intent android-recyclerview


【解决方案1】:

首先创建这个接口

public interface RunnableValue {

public void run(Object obj);
}

2.这个MainActivity添加

 RunnableValue run=new RunnableValue() {
        @Override
        public Bundle run(Object obj) {

             String str = obj.toString();

            Intent intent = new Intent();
            intent.putExtra("data",str);
            setResult(RESULT_OK,intent);
            finish();
          }
    };
    mAdapter = new SearchAdapter(dataSet,run);
  1. 这个 RecyclerView 适配器

    public SearchAdapter(List<String>  dataSet,RunnableValue runnableValue) {
        mDataSet = dataSet;
        this.runnableValue=runnableValue;
    }
    public static class SearchHolder extends RecyclerView.ViewHolder {
    private final TextView textView;
    
    public SearchHolder(View v) {
        super(v);
    
        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                runnableValue.run(getTextView().toString());
            }
        });
        textView = (TextView) v.findViewById(R.id.txtSearchItem);
    }
    
    public TextView getTextView() {
        return textView;
    }
    

    }

【讨论】:

    【解决方案2】:

    按照 Jacob 的解决方案 here。这为 RecyclerView 添加了监听器。然后,按照您在 ListView 中所做的操作。

    【讨论】:

    • 我希望 recycler-view 中的数据显示在上一个项目点击活动的编辑文本中
    【解决方案3】:

    RecyclerView 中没有可用的setOnItemClickListener,因此您需要在您的RecyclerView 适配器中创建自己的点击监听器,只需查看post,然后您应该可以做到。

    希望对您有所帮助!

    【讨论】:

    • 我发布的代码使用了我已经完成的列表视图
    • 是的,所以我说的是RecyclerView,帖子也是给RecyclerView的,不是吗?
    • 它是正确的,但我在将数据从回收站视图传递到之前的项目点击活动时遇到了问题
    • 您可以在具有点击监听器的 ViewHolder 中进行操作
    • 点击工作对我来说很好,我可以在 toast 消息中显示数据,但我想将该数据发送回以前的活动
    【解决方案4】:

    RecyclerView 没有像它的前身 ListView 那样的 setOnItemClickListener。但是,这不应该阻止我们做我们想做的事情。因此,我们重新发明轮子并为您的 RecyclerView 制作我们自己的 OnItemClickListener。这是一个分步指南。

    1. 通过创建一个名为 OnItemClickListener.java 的新文件和一个名为 onItemClick 的空方法来创建一个名为 OnItemClickListener 的接口。

      public interface OnItemClickListener {
           public void onItemClick(View view , int position);
       }
      
    2. 在您的适配器中创建一个名为

      的静态变量
      static OnItemClickListener mItemClickListener;
      
    3. 在您的自定义 ViewHolder 中设置 onClickListener,像这样调用我们的 onItemClick 方法

      @Override
      public void onClick(View view) {
         mItemClickListener.onItemClick(view, getPosition());
      }
      
    4. 在您的适配器类中创建一个名为 SetOnItemClickListener 的公共方法

      public void SetOnItemClickListener(final OnItemClickListener mItemClickListener)
      {
      this.mItemClickListener = mItemClickListener;
      }
      
    5. 您的自定义 RecyclerView 适配器上的 SetOnItemClickListener

      ((NameOfYourAdapter) mAdapter).SetOnItemClickListener(new OnItemClickListener() {
      
                  @Override
                  public void onItemClick(View view, int position) {
                      if(view != null)
                      {
              TextView txt = (TextView) view.findViewById(R.id.textView);
              String str = txt.getText().toString();
                          Intent intent = new Intent();
                          intent.putExtra("data",str);
                          setResult(RESULT_OK, intent);
                          //close this Activity...
                          finish();
                      }
                  }
              });
      

    应该这样做。如果您有任何问题,请随时提出!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多