Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数据从recyclerview传递到fragment_Java_Android_Android Fragments_Android Recyclerview - Fatal编程技术网

Java 如何将数据从recyclerview传递到fragment

Java 如何将数据从recyclerview传递到fragment,java,android,android-fragments,android-recyclerview,Java,Android,Android Fragments,Android Recyclerview,我按照youtube教程编写应用程序。这些代码是我的RecycleServiceAdapter的一部分 vHolder.item_contact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView dialog_name_tv = (TextView) myDialog.findVie

我按照youtube教程编写应用程序。这些代码是我的RecycleServiceAdapter的一部分

        vHolder.item_contact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TextView dialog_name_tv = (TextView) myDialog.findViewById(R.id.dialog_name_id);
            TextView dialog_phone_tv = (TextView) myDialog.findViewById(R.id.dialog_phone_id);
            ImageView dialog_contact_img = (ImageView) myDialog.findViewById(R.id.dialog_img);
            TextView dialog_detail_tv = (TextView) myDialog.findViewById(R.id.dialog_detail);
            dialog_name_tv.setText(mData.get(vHolder.getAdapterPosition()).getName());
            dialog_phone_tv.setText(mData.get(vHolder.getAdapterPosition()).getPhone());
            dialog_contact_img.setImageResource(mData.get(vHolder.getAdapterPosition()).getPhoto());
            dialog_detail_tv.setText(mData.get(vHolder.getAdapterPosition()).getDetail());
            Toast.makeText(mContext, "Test Click" + String.valueOf(vHolder.getAdapterPosition()), Toast.LENGTH_SHORT).show();
            myDialog.show();
            Button dialog_add_tv = (Button) myDialog.findViewById(R.id.dialog_add);
            dialog_add_tv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    EditText dialog_quantity_tv = (EditText) myDialog.findViewById(R.id.dialog_quantity);
                    quantity = dialog_quantity_tv.getText().toString();
                    name = mData.get(vHolder.getAdapterPosition()).getName()+"\n";
                    price = mData.get(vHolder.getAdapterPosition()).getPhone();
                    Intent i = new 
                    Intent(getActivity(),FragmentFav.class);
                    Bundle bundle = new Bundle();
                    bundle.putString("choices",choices);
                    bundle.putDouble("price",price);
                    i.putExtras(bundle);
                    startActivity(i);


                }
            });

        }
    });



    return vHolder;
}
我想单击对话框添加电视按钮将数据传递到fragment.class

public class FragmentFav extends Fragment {

View v;

public FragmentFav() {
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.call_fragment, container, false);
    return v;

}
}


我多次尝试使用intent仍然会发生错误。

使用intent您无法打开片段,请使用下面的代码打开片段,并将数据传递给片段

// define a framelayout in activity xml

  <FrameLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:id="@+id/fragment_container"></FrameLayout>

 // then write below code on the click of dialog_add_tv button

 Bundle bundle = new Bundle();
 bundle.putString("choices",choices);
 bundle.putDouble("price",price);

 FragmentFav frgFav=new  FragmentFav();
 frgFav.setArguments(bundle);

 FragmentTransaction fragmentTrasaction=getFragmentManager().beginTransaction();
 fragmentTrasaction.add(R.id.fragment_container,frgFav,"frg");
 fragmentTrasaction.commit();


// then get data in fragment like this
 String choice=getArguments().getString("choices");
 String price=getArguments().getString("price");
//在活动xml中定义框架布局
//然后在单击对话框添加电视按钮时编写以下代码
Bundle=新Bundle();
bundle.putString(“选项”,选项);
bundle.putDouble(“价格”,price);
FragmentFav frgFav=新的FragmentFav();
frgFav.setArguments(bundle);
FragmentTransaction FragmentTransaction=getFragmentManager().beginTransaction();
添加(R.id.fragment_容器,frgFav,“frg”);
fragmentTrasaction.commit();
//然后像这样获取片段中的数据
String choice=getArguments().getString(“选项”);
字符串price=getArguments().getString(“price”);

以下是您可以遵循并实施所需的步骤

步骤1: 在适配器和片段之间创建接口

步骤2: 在适配器中实现如下接口:

 vHolder.item_contact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
       mProfileItemClickListener.itemContact(v);
 }
//aka通过接口传递整个视图

步骤3: 在接口中,类添加此方法

void itemContact(View mView);
步骤4: 在片段中实现接口:

  • 在这里,您将获得一个覆盖方法并在那里执行您的操作

    @凌驾 公共无效项目联系人(ImageView mProfileImageView){ 你的代码在这里 }


在视图之间传递数据时,您可以正确处理回调。

您不能对要传递
片段FAV
意图
调用
startActivity
。您需要一个包含
片段fav
活动
,而您需要启动该活动。