当前位置: 首页 > 知识库问答 >
问题:

从父片段到选项卡式片段(子片段)的数据传递-Android

翟修永
2023-03-14

我想将数据从父片段传递到选项卡式片段(子片段),以便传递初始数据(当父片段第一次加载时),我使用了Bundle数据。当在子片段的嵌套片段中时,我调用PopbackStack(),以便通过单击按钮返回。在那里,我需要更新之前传递到子选项卡片段的捆绑数据。捆绑数据不会得到更新的数据集

父片段-初始状态

 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ViewPager viewPager = (ViewPager) getView().findViewById(R.id.pager);
        CropFragAdapter adapter = new CropFragAdapter(getChildFragmentManager());



        Fragment tabfragment1 = new CropAlreadyPlantedFragment();
        Fragment tabfragment2 = new FuturePlantedFragment();


            Bundle b = new Bundle();
            b.putString("RAWJsonArr", INITAL_DATA_FOR_TAB_1);
            tabfragment1.setArguments(b);

            b.putString("RAWJsonArr", INITAL_DATA_FOR_TAB_2);
            tabfragment2.setArguments(b);



        adapter.addFragment(tabfragment1, "Already Planted");
        adapter.addFragment(tabfragment2, "Future Planted");


        viewPager.setAdapter(adapter);

        TabLayout tabLayout = (TabLayout) getView().findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

    }

子片段-Tab片段

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        cropAlreadyPlantedModel = new CropAlreadyPlantedModel();
        String RAWJsonArr =null;
        Bundle b = getArguments();
        if (b != null) {
            RAWJsonArr = b.getString("RAWJsonArr");
            JSONOBJ = null;
            try {
                DATASET = new JSONArray(RAWJsonArr);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }


        View view = cropAlreadyPlantedModel.getCropItems(inflater, container, getContext(), DATASET);
        return view;
    }

孩子-

 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);

            saveBtn = (Button) getView().findViewById(R.id.button);
            saveBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    JSONObject obj = new JSONObject();
                    try {
                        obj.put("crop_details",DATASETARRY);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                    if(SELECTED_TAB ==0) {
                        childDataCropDetails = obj; //static variable in Parent Fragment
                    }
                    else if(SELECTED_TAB ==1){
                        Future_childDataCropDetails = obj; //static variable in Parent Fragment
                    }
                    FragmentManager manager = getActivity().getSupportFragmentManager();


                    manager.popBackStack();

                }
            });


        }

我错过了什么?请帮忙

共有1个答案

计承德
2023-03-14

问题是我在子片段中所说的范围是错误的(不是当前范围)。

Bundle b = this.getArguments();
 类似资料:
  • 我有两个活动,在活动1中有碎片,在活动2中有碎片 fragment1和fragment2扩展自FragmentActivity1,activity2扩展自AppCompatActivity 我想将字符串值从fragment1发送到fragment2,而不获取空值。我希望你能理解这个问题。谢谢

  • 这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.

  • 我在一个片段中有一个复选框列表(我们称之为FragmentA),我有一个包含两个片段(FragmentB和C)的活动。如果选中一个复选框,我想在片段C中显示一条消息,说明选中了特定的复选框。我需要帮助,因为我不知道如何将(isChecked)从片段A传递到片段C。 FragmentA.java 分数不影响碎片C。 包含片段 B 和 C 的活动 片段C 活动

  • 在FragmentOne.class扩展android.support.v4.app.

  • 我有一些RadioButton在片段A,,和一些RadioButton在片段B我希望当这些(FragmentA)之一,在FragmentB禁用所有单选按钮.相同的活动主机这些片段。 片段A中的事件单击单选按钮:

  • 我有一个,它创建一个,然后这个创建另一个: 这让我想到。是否真的可以删除并转到? 提前感谢您的时间,我在网上找不到任何合适的信息!