Номер.Чтение данных передается id.Обязательный метод не вызывается - PullRequest
0 голосов
/ 15 февраля 2019

Есть два фрагмента.В первом утилизаторе с карточками, во втором отражено подробное описание карточки.В первом фрагменте я помещаю тег 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;
 }

Как я могу получить информацию о выбранном элементе во втором фрагменте?Я выбрал правильный путь или мне нужно сделать что-то другое?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...