将数据从片段子viewpager传递到父viewpager

问题描述 投票:0回答:1

我是Android新手。如果我的问题愚蠢或多余,请原谅我。或者如果问题不是很清楚,我将再解释一次。

我面临的问题是我有一个Activity,在我要为其增加一个fragmentA。

此fragmentA在其中包含一个viewpager。 Viewpager中包含fragmentA1和FragmentA2。

现在,单击fragmentA1中的textView,将产生FragmentB,该FragmentB中包含另一个包含4个片段的ViewPager。即FragmentB1,B2,B3,B4。所有这些片段中都有RecyclerViews。以及它们各自的RecyclerView适配器。

现在,单击以免FragmentB2上的任何列表项。我希望将该列表项中的数据发送回FragmentA1。类似地,我想从子viewpager的任何片段中发送listItem数据,即FragmentB1,B2,B3,B4要发送到FragmentA1。在父片段的viewpager中。

任何人都可以帮助我解决这个问题。我已经尝试过Stackoverflow提供的各种解决方案,但到目前为止还没有运气。今天是我从事此工作的第二天,但我仍然对这个问题感到困惑。

我刚刚使用以下代码保存了应用程序的崩溃功能:

holder.chooseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mRecyclerOnClickHandler.onClick(combo.get(position).getRs());
                Intent intent = new Intent(mFragmentActivity, mFragmentActivity.getClass());
                intent.putExtra("planPrice", combo.get(position).getRs());
                mFragmentActivity.getSupportFragmentManager().getFragments().get(0).onActivityResult(
                        mFragmentActivity.getSupportFragmentManager().getFragments().get(0).getTargetRequestCode(), RESULT_OK, intent);

                mFragmentActivity.getSupportFragmentManager().popBackStack();
            }
        });

但是我无法传递数据。

请帮助我解决这个问题。

谢谢。

android android-studio android-fragments android-viewpager
1个回答
0
投票

创建扩展ViewModel的类

public class SharedViewModel extends ViewModel {
    private final MutableLiveData<String> priceLiveData = new MutableLiveData<String>();

    public void setPrice(String price) {
        selected.setValue(price);
    }

    public LiveData<Item> getPrice() {
        return priceLiveData;
    }
}

在FragmentB1,FragmetB2,FragmentB3,FragmentB4适配器中设置价格值

public class FragmentB1Adapter... {

     FragmentActivity activity;

     // here we need FragmentActivity so add it in construction
     FragmentB1Adapter(FragmentActivity activity){
          this.activity=activity;
     }

    //add this in onBindViewHolder
    private SharedViewModel model=newViewModelProvider(activity).get(SharedViewModel.class);


     //on button click
    holder.chooseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            model.setPrice(price);
        });
    }
}

想要值的片段

public class FragmentA1 extends Fragment {

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

        //other code

         //get value of price
        SharedViewModel model = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
        model.getPrice().observe(getViewLifecycleOwner(), { new Observer<String>()       {
        @Override
        public void onChanged(String price) {
           //here you got your price
        });
    }


}
© www.soinside.com 2019 - 2024. All rights reserved.