片段从回收站视图中检索数据

时间:2018-02-01 18:59:24

标签: android android-recyclerview fragment recycler-adapter

这是我RecyclerView的适配器。它旨在将数据从RecyclerView传递到我的Fragment,但我无法通过onClick()方法执行此操作。

itemView.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View v) {

       Bundle bundle = new Bundle();
       bundle.putString("name",name.getText().toString() );
       OneFragment myFrag = new OneFragment();
       myFrag.setArguments(bundle);
}

我的片段

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    txt_name=(TextView) txt_name.findViewById(R.id.name_emp);
    String name = getArguments().getString("name");
    txt_name.setText(name);
}

3 个答案:

答案 0 :(得分:0)

我不确定你打算做什么。但是在将一个包设置为一个片段之后,你必须使用像这样的事务来启动片段

 getSupportFragmentManager().beginTransaction().add(<id of the container>, myFrag).commit();

查看fragments

上的文档

答案 1 :(得分:0)

喜欢下面的代码为你的Activity创建一个方法,你有片段:

Recyclerview适配器代码:

itemView.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
    ((MainActivity)context).sendData(name.getText().toString());
}

在MainActivity中获取字符串并从Activity调用Fragment:

MainActivity Code:

 String name;

 public void sendData(String nameAdapter)
{
    name = nameAdapter;
    if(name!=null){
        MedicineFragment med_frag = MedicineFragment.newInstance(name);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.content_frame, med_frag)
                .commit();
    }

}

在您的片段中获取Name的名称,如下所示:

片段代码:

String name;

public static MedicineFragment newInstance(String nameValue) {

    Bundle args = new Bundle();
    MedicineFragment fragment = new MedicineFragment();
    name = nameValue;
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

在main_activity.xml中你必须采用FrameLayout,只有这个布局你的片段会改变一个。

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/search_layout"
        android:background="@color/blue_veryLight"
        android:id="@+id/content_frame">
    </FrameLayout>

答案 2 :(得分:0)

我知道我迟到了。不过,我会在这里发布一个答案。

在适配器类中进行这些更改。

public class FooAdapter extends extends RecyclerView.Adapter<FooAdapter.FooHolder> {

    private RvClickListener mClickListener;
    ......
    // rest of the code here
    ......

    public FooAdapter(<other parameters>, RvClickListener clickListener) {
       .....
       // other variables initializations here
       .....
       mClickListener = clickListener;
    }

    ......
    // rest of the code here
    ......

    @Override
    public void onBindViewHolder(FooHolder holder, int position) {
       // rest of the code

      holder.itemView.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (mClickListener != null) {
                        mClickListener.onClick(name.getText().toString());
                    }
                }
            });
    }

    // other codes here

    public interface RvClickListener {
        void onClick(String name);
    }

}

现在是我们Fragment类中适配器的时间了。您需要更改以下代码。

public class FooFragment extends Fragment {

  // other codes here

  // before setting adapter to RecyclerView make these changes.

    FooAdapter adapter = new FooAdapter(
                                    <other parameters>,
                                     new RvClickListener() {
                                        @Override
                                          public void onClick(String name) {
                                             // do whatever you want
                                          }
                                  });
}