Надо в фрагмент передать слово, в зависимости от которого 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;
}
}