Есть два фрагмента.В первом утилизаторе с карточками, во втором отражено подробное описание карточки.В первом фрагменте я помещаю тег id в комплект, который я установил в адаптер, затем вызываю второй фрагмент
, вынимаю переданный идентификатор и, по аналогии с первым фрагментом, обращаюсь к модели.view, пытаюсь вызвать getById (), но этот метод даже не найден.
Мне пришлось сделать два конструктора, потому что, когда в одном было два параметра, приложение обычно зависало.Поправьте, если вы не можете этого сделать.
public class VersesFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
recyclerView.setAdapter(adapter);
VersesViewModel versesViewModel =
ViewModelProviders.of(this).get(VersesViewModel.class);
versesViewModel.getAllVerses().observe(this, new Observer<List<Verses>>() {
@Override
public void onChanged(List<Verses> verses) {
adapter.setVerses(verses);
}
});
return rootViewVerses;
}
private final VersesAdapter.OnVerseClickListener onVerseClickListener =
new VersesAdapter.OnVerseClickListener() {
@Override
public void onVerseClick(int verseId) {
ReadFragment readFragment = new ReadFragment();
Bundle bundle = new Bundle();
bundle.putInt("tag", verseId);
readFragment.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager != null) {
fragmentManager.beginTransaction().replace(R.id.content_frame,
readFragment).commit();
}
второй фрагмент
public class ReadFragment extends Fragment {
private int verseId;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootViewRead = inflater.inflate(R.layout.fragment_read, container,
false);
......
Bundle bundle = getArguments();
if (bundle != null) {
verseId = bundle.getInt("tag");
}
TextView tvTitle = (TextView) rootViewRead.findViewById(R.id.text);
VersesViewModel versesViewModel =
ViewModelProviders.of(this).get(VersesViewModel.class);
versesViewModel. // there don't call getById
return rootViewRead;
}
другие классы
public class VersesViewModel extends AndroidViewModel {
private VersesRepository repository;
private LiveData<List<Verses>> allVerses;
private LiveData<Verses> currentVerse;
public VersesViewModel(Application application) {
super(application);
repository = new VersesRepository(application);
allVerses = repository.getAllVerses();
}
public VersesViewModel(Application application, int id) {
super(application);
repository = new VersesRepository(application);
currentVerse = repository.getById(id);
}
public LiveData<Verses> getById(int id){
return currentVerse;
}
public LiveData<List<Verses>> getAllVerses() {
return allVerses;
}
public LiveData<List<Verses>> getAllFavorite() {
return allFavorite;
}
репо
public class VersesRepository {
private VersesDao versesDao;
private LiveData<List<Verses>> allVerses;
private LiveData<Verses> currentVerse;
VersesRepository(Application application) {
DatabaseCopier db = DatabaseCopier.getInstance(application);
versesDao = db.getDatabase().versesDao();
allVerses = versesDao.getAllVerses();
}
VersesRepository(Application application, int id){
DatabaseCopier db = DatabaseCopier.getInstance(application);
currentVerse = versesDao.getById(id);
}
LiveData<List<Verses>> getAllVerses() {
return allVerses;
}
LiveData<Verses> getById(int id){
return currentVerse;
}
Как я могу получить информацию о выбранном элементе во втором фрагменте?Я выбрал правильный путь или мне нужно сделать что-то другое?