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

Posted

技术标签:

【中文标题】数据从父片段传递到选项卡片段(子) - Android【英文标题】:Data Passing from Parent Fragment to Tabbed Fragment (child) - Android 【发布时间】:2018-06-24 07:29:49 【问题描述】:

我想将数据从父片段传递到选项卡式片段(子)以进行初始数据传递(当父片段第一次加载时)我使用了捆绑数据。当在子片段的嵌套片段中时,我调用 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);

    

子片段 - 选项卡片段

 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;
    

Child->Child Fragment的按钮点击

 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】:

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

Bundle b = this.getArguments();

【讨论】:

以上是关于数据从父片段传递到选项卡片段(子) - Android的主要内容,如果未能解决你的问题,请参考以下文章

将 Google API 客户端对象从活动传递到滑动选项卡片段

片段和活动之间没有传递值

如何将数据从 Intent 传递到 Fragment

如何在每个操作栏选项卡中维护多个Fragment堆栈或多个子片段

操作栏选项卡:使用多次实例化的单个片段时如何传递参数

Android studio 动态片段根据日期