Фрагменты внутри RecyclerView - PullRequest
0 голосов
/ 10 марта 2020

Первый: я довольно новичок в android. Этот проект, вероятно, выше моей зарплаты, поэтому, если я задам неправильный вопрос, по крайней мере, вы понимаете.

Я хочу использовать TabLayout с ViewPager2 с представлениями, которые будут содержаться на каждой странице, из сложных фрагментов. Каждая страница будет иметь одинаковое определение фрагмента. Насколько я могу сказать, ViewPager2 зависит от RecyclerView. Я пытался использовать LinearLayout для каждой страницы, и я продолжал получать ошибку, которая ссылалась на RecyclerView.Adapter.

Я создаю recyclerView из другого фрагмента как:

recyclerView = (RecyclerView) mView.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
// use a linear layout manager
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
List<String> input = new ArrayList<>();
for (int i = 0; i < 5; i++) {
    input.add("Test" + i);
}// define an adapter
mAdapter = new SalinasAdapter(input, this);
recyclerView.setAdapter(mAdapter);

и OnCreateViewHolder от SalinasAdapter

public SalinasAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // create a new view
    View v = null;
    FragmentManager fm = mFragment.getChildFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    // Add the fragment but do not put it in a container
    ft.add(new RowFragment(), Integer.toString(mIndex));
    ft.commit();
    ft.commitNow();

    // Find the fragment from the fragment manager
    Fragment foo = fm.findFragmentByTag(Integer.toString(mIndex));
    mIndex++;

    // Keep track of the index in an ArrayList<String> so they can be removed from the 
    // FragmentManager when needed.
    // ToDo

    // Make sure it is mine
    if (foo instanceof RowFragment){
        v = foo.getView();
    }

    // Add the view to a ViewHolder
    ViewHolder vh = new ViewHolder(v);

    return vh;
}

Исходя из этого, я предполагаю, что реальные представления передаются в ViewHolder, и он может найти все элементы, необходимые для правильной установки данных.

Когда приложение показывает, пять строк в течение коротких нескольких секунд, прежде чем он падает.

Я думаю, у меня есть два вопроса: это правильный взгляд на эту проблему? Есть ли способ отладки, чтобы отследить трассировку стека неисправностей?

1 Ответ

0 голосов
/ 17 марта 2020

(Размещено решение от имени автора вопроса, чтобы переместить его в область ответов).

Я исправил проблему, добавив: fragmentManager.executePendingTransactions() вместо commitNow().

...