@SimpleName

Как в database.getReference().child() фрагмента передать значение из другого фрагмента через ViewModel?

Надо в фрагмент передать слово, в зависимости от которого firebase должен загрузить данные. Как это сделать? Как загрузить строку в database.getReference().child(), переданную через ViewModel?
Код SharedViewModel
public class SharedViewModel extends ViewModel {
    private MutableLiveData<String> selected = new MutableLiveData<>();

    public void select(String item) {
        selected.setValue(item);
    }

    public LiveData<String> getSelected() {
        return selected;
    }
}

Код фрагмента1, который отправляет строку для firebase во время нажатия на картинку.
public class Fragment1 extends Fragment {

    private SharedViewModel model;


    public Fragment1() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
      
        View view = inflater.inflate(R.layout.fragment1, container, false);

        model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);

        ImageView imageView1 = view.findViewById(R.id.imageCompany);
        imageView1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                model.select("DataOne");

                Fragment2 newFragment = new Fragment2();
                ((AppCompatActivity) view.getContext()).getSupportFragmentManager().beginTransaction()
                        .replace(R.id.content_frame, newFragment)
                        .addToBackStack(null)
                        .commit();
            }
        });

        return view;
    }
}

Вот второй фрагмент, в котором находится список, который должен загружать загружает данные из firebase на основе полученной строки(код упростил).
public class Fragment2 extends Fragment {

    private DatabaseReference mRef;
    private FirebaseDatabase database;

    private SharedViewModel model;


    public Fragment2() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment2, container, false);

        final SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);

        model.getSelected().observe(this, new Observer() {
            @Override
            public void onChanged(@Nullable Object o) {
                
            }
        });

        database = FirebaseDatabase.getInstance();
        mRef = database.getReference().child(String.valueOf(model.getSelected()));

        mRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                GalleryGridObject image = dataSnapshot.getValue(GalleryGridObject.class);
                galleryList.add(image);
                recyclerView.setAdapter(mAdapter);
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }
        });

        return view;
    }
}
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
@SimpleName Автор вопроса
в строке
mRef = database.getReference().child(String.valueOf(model.getSelected()));

надо заменить String.valueOf(model.getSelected()) на model.getSelected().getValue()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы