返回上一个Activity,其中有一些'put extra` onClick of recyclerView Item

时间:2015-04-22 11:13:56

标签: java android android-intent android-recyclerview

我想在回收器视图中单击项目时传递先前活动的数据,并在编辑文本上显示。

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

我想用Recyclerview做同样的事情

//调用第二个活动

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

// onClick of listview将数据传回上一个活动

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

}

4 个答案:

答案 0 :(得分:1)

首先创建此接口

public interface RunnableValue {

public void run(Object obj);
}

2.This MainActivity add

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

    }

答案 1 :(得分:0)

按照雅各布的解决方案here。这为RecyclerView添加了监听器。然后,执行与在ListView中完成的操作相同的操作。

答案 2 :(得分:0)

setOnItemClickListener中没有RecyclerView,因此您需要在RecyclerView adaper中创建自己的点击监听器,只需查看post,然后您就应该能够成功。

希望这有帮助!

答案 3 :(得分:0)

RecyclerView没有像其前身ListView那样的setOnItemClickListener。但是,这不应该妨碍我们做我们想做的事情。因此,我们重新发明轮子并为您的RecyclerView创建我们自己的OnItemClickListener。这是一个循序渐进的指南。

  1. 通过使用名为onItemClick的空方法创建名为OnItemClickListener.java的新文件,创建名为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适配器上的
  6. 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();
                    }
                }
            });
    
  7. 应该这样做。如果您有任何疑问,请随时提出!