передача данных из фрагмента дочернего viewpager в родительский viewpager - PullRequest
0 голосов
/ 27 апреля 2020

Я новичок в Android. Так что прости меня, если мой вопрос глупый или излишний. или я объясню еще раз, если вопрос не очень ясен.

Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть активность, на которую я надуваю фрагмент A.

Этот фрагмент A содержит просмотрщик в нем. Viewpager имеет фрагментA1 и FragmentA2 в нем.

Теперь, щелкнув текстовое представление во фрагменте A1, вы получите FragmentB, который содержит другой ViewPager с 4 фрагментами в нем. А именно Фрагмент B1, B2, B3, B4. Все эти фрагменты имеют RecyclerViews в них. с их соответствующими адаптерами RecyclerView.

Теперь, после нажатия на любой элемент списка во фрагменте B2. Я хочу, чтобы данные из этого элемента списка были отправлены обратно в FragmentA1 . Точно так же я хочу отправить данные listItem из любого из фрагментов дочернего viewpager, то есть FragmentB1, B2, B3, B4, для отправки в FragmentA1 . который находится в окне просмотра родительского фрагмента.

Может кто-нибудь, пожалуйста, помогите мне с этой проблемой. Я пробовал различные решения от 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();
            }
        });

Но я ' Я не могу передать данные.

Пожалуйста, помогите мне с этой проблемой.

Спасибо.

1 Ответ

0 голосов
/ 28 апреля 2020

Создать класс, который расширяет 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
        });
    }


}

Надеюсь, это поможет!

...