NotifyDataSetChanged не работает в FragmentStateAdapter с Viewpager2Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 NotifyDataSetChanged не работает в FragmentStateAdapter с Viewpager2

Сообщение Anonymous »

Я создаю страницу выбора файла с помощью viewpager2 с FragmentStateAdapter. На одной из страниц я показываю все подключенные устройства хранения данных, на которые я хотел бы нажать, чтобы просмотреть содержимое, но хочу, чтобы содержимое находилось в другом фрагменте.
Я хочу заменить фрагмент на еще один на последней странице viewpager. но с помощью следующего кода страница просто обновляется, и новый фрагмент не создается, поскольку createFragment не вызывается.
Мой PagerAdapter

Код: Выделить всё

public static class PagerAdapter extends FragmentStateAdapter {

private Fragment mFragmentAtPos0;
private final FragmentManager mFragmentManager;
private final FirstPageListener listener = new FirstPageListener();
public final class FirstPageListener implements
FirstPageFragmentListener {
public void onSwitchToNextFragment() {
mFragmentManager.beginTransaction().remove(mFragmentAtPos0)
.commit();
if (mFragmentAtPos0 instanceof FilesandFolder_Others_MainPage){
mFragmentAtPos0 = new FileExplorer(listener);
}else{ // Instance of NextFragment
mFragmentAtPos0 = new FilesandFolder_Others_MainPage(listener);
}
notifyDataSetChanged();
}
public void onSwitchToNextFragment(Bundle bundle) {
//                mFragmentManager.beginTransaction().remove(mFragmentAtPos0)
//                        .commit();
if (mFragmentAtPos0 instanceof FilesandFolder_Others_MainPage){
mFragmentAtPos0 = new FileExplorer(listener);
mFragmentAtPos0.setArguments(bundle);
}else{ // Instance of NextFragment
mFragmentAtPos0 = new FilesandFolder_Others_MainPage(listener);
mFragmentAtPos0.setArguments(bundle);
}
notifyDataSetChanged();
//                notifyItemChanged(getItemPosition(mFragmentAtPos0));
}
}

//        @Override
//        public void onBindViewHolder(@NonNull FragmentViewHolder holder, int position, @NonNull List payloads) {
//            super.onBindViewHolder(holder, position, payloads);
//            if (position == getItemPosition(mFragmentAtPos0)) {
//
//                Fragment f = mFragmentManager.findFragmentByTag("f" + holder.getItemId());
//                if (f != null) {
//                    mFragmentManager.beginTransaction().replace(holder.getItemId(), )
//                }
//            }
//        }

private int getItemPosition(Fragment mFragmentAtPos0) {
for (int i = 0; i < getItemCount(); i++){

if (createFragment(i).equals(mFragmentAtPos0)){
return i;
}
}
return -1;
}

public PagerAdapter(FragmentActivity fm) {
super(fm);
mFragmentManager = fm.getSupportFragmentManager();
mFragmentAtPos0 = new FilesandFolder_Others_MainPage(listener);
}

@NonNull
@Override
public Fragment createFragment(int position) {
switch (position){
case 0:
return new AppSelectionFragment();
case 1:
return new Photos();
case 2:
return new VideoGalleryFragment();
case 3:
return new Gallery();
default:
return mFragmentAtPos0;
}
}

@Override
public int getItemCount() {
return 5;
}
}

Вот конструктор фрагмента, из которого я хотел бы заменить другой фрагмент:

Код: Выделить всё

    private static FileSelection.PagerAdapter.FirstPageListener pageFragmentListener;

public FilesandFolder_Others_MainPage() {
}
public FilesandFolder_Others_MainPage(FileSelection.PagerAdapter.FirstPageListener firstPageFragmentListener) {
pageFragmentListener = firstPageFragmentListener;
}

И при нажатии на представление
должен вызываться следующий код: -

Код: Выделить всё

Bundle bundle = new Bundle();
bundle.putString("PATH", volumes.get(position).path);
pageFragmentListener.onSwitchToNextFragment(bundle);
Я искал по всему stackoverflow и так и не нашел правильного ответа с помощью viewpager 2 и FragmentStateAdapter, поскольку все, кажется, используют Viewpager
Я пытался реализуйте это: - FragmentStateAdapter для ViewPager2 notifyItemChanged не работает должным образом
, но не мог понять, как редактировать мой код. Пожалуйста, помогите
Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/628 ... viewpager2
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»