ListView во фрагменте не обновляется при перемещении между фрагментами

ListView в FragmentA отлично обновляется при переходе от Activity к Fragment. Это мой очень-очень успешный код в fragmentA, но прежде это ВЫВОД, который я покажу после этого:

ВЫХОД:из первого запроса

EAT
DRINK
POOP

из второго запроса

DONALD TRUMP
BARRACK OBAMA
GEORGE BUSH

успех выше вывода происходит, когда я перехожу от,

ФрагментА --> Деятельность --> вернуться к ФрагментА

но когда я так двигаюсь,

ФрагментА --> ФрагментБ --> вернуться к ФрагментА

ListView показать нежелательный результат по возрастанию

// wrong
POOP
DRINK
EAT

// true
EAT
DRINK
EAT

а второго запроса вообще нет.

Я очень благодарен за ваш ответ. Прежде чем я покажу код после этого, вот что происходит, зачем переходить в «Активность», а затем успешно обновлять потому что я помещаю фрагменты в MainActivity, поэтому:

ГлавнаяАктивность --> Деятельность --> снова вызвать onCreate в MainActivity ФрагментА --> ФрагментБ --> не вызывать onCreate в MainActivity

Все коды ниже внутри FragmentA.

Хорошо, код первого запроса:

// when scroll reach bottom   
recyclerSeen.addOnScrollListener(new RecyclerView.OnScrollListener() {
  @Override
  public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                        super.onScrolled(recyclerView, dx, dy);    

       // vertical scroll
       Boolean reachBottom = !recyclerView.canScrollVertically(-1);


       if (reachBottom) {
          secondQuery();
       }
  }
});


                Query firstQuery = firebaseFirestore
                        .collection("Posts")                        
                        .orderBy("timestamp", Query.Direction.DESCENDING)
                        .limit(3);    
                                firstQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
                    @Override
                    public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {

                        if (isFirstPageFirstLoad) {
                            lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() - 1);
                        }

                        for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {

                            if (doc.getType() == DocumentChange.Type.ADDED) {

                                //String postId = doc.getDocument().getId();
                                ContentProfile contentSeen = doc.getDocument().toObject(ContentProfile.class);

                                /* how to store multi ArrayList */

                                if (isFirstPageFirstLoad) {
                                    contentList.add(contentSeen);
                                } else {
                                    contentList.add(0, contentSeen);
                                }

                                adapterSeen.notifyDataSetChanged();
                            }
                        }

                        isFirstPageFirstLoad = false;
                    }
                });

второй код запроса:

    public void loadMorePost() {       

        Query nextQuery = firebaseFirestore                    
                .orderBy("timestamp", Query.Direction.DESCENDING)
                .collection("Posts") 
                .startAfter(lastVisible)
                .limit(3);

        nextQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {

                if (!documentSnapshots.isEmpty()) {

                    lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() - 1);
                    for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {

                        if (doc.getType() == DocumentChange.Type.ADDED) {

                            //String postId = doc.getDocument().getId();
                            ContentProfile contentSeen = doc.getDocument().toObject(ContentProfile.class);
                            contentList.add(contentSeen);

                            adapterSeen.notifyDataSetChanged();

                        }
                    }
                }
            }
        });
    }

MainActivity.класс

public class MainActivity extends AppCompatActivity {

    private HomeFragment homeFragment;
    private Search search;
    private CenterFragment centerFragment;
    private Notification notification;
    private ProfileFragment profileFragment;
    private BottomNavigationView bottomNavigation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        homeFragment = new HomeFragment();
        search = new Search();
        centerFragment = new CenterFragment();
        notification = new Notification();
        profileFragment = new ProfileFragment();

        bottomNavigation = findViewById(R.id.bottom_navigation);
        BottomNavigationViewHelper.removeShiftAnimation(bottomNavigation);

        //initializeFragment
        replaceFragment(homeFragment);   


    }

    @Override
    public void onStart() {
        super.onStart();

        bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener(){
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item){

                switch(item.getItemId()){

                    case R.id.action_home :
                        replaceFragment(homeFragment);
                        return true;

                    case R.id.action_search :
                        replaceFragment(search);
                        return true;

                    case R.id.action_center :
                        replaceFragment(centerFragment);
                        return true;

                    case R.id.action_notif :
                        replaceFragment(notification);
                        return true;

                    case R.id.action_profile :
                        replaceFragment(profileFragment);
                        return true;

                    default:
                        return false;
                }
            }
        });
    }

    private void replaceFragment(Fragment fragment){
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();

        fragmentTransaction.replace(R.id.main_container, fragment);
        fragmentTransaction.commit();
    }


   }

у меня есть решение для решения моей вышеуказанной проблемы, пока я не знаю, как его обновить, или вызвать MainActivity onCreate() вручную, или remove() фрагмент, или whatever чистый код, что я делаю, это изменить replace стать hide. И этот код ниже работает как шарм, мне не нужно обновлять свой список.

public class MainActivity extends AppCompatActivity {

    private HomeFragment homeFragment;
    private Search search;
    private CenterFragment centerFragment;
    private Notification notification;
    private ProfileFragment profileFragment;
    private BottomNavigationView bottomNavigation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        homeFragment = new HomeFragment();
        search = new Search();
        centerFragment = new CenterFragment();
        notification = new Notification();
        profileFragment = new ProfileFragment();

        bottomNavigation = findViewById(R.id.bottom_navigation);
        BottomNavigationViewHelper.removeShiftAnimation(bottomNavigation);

        initializeFragment();

        //replaceFragment(homeFragment);

        Toast.makeText(MainActivity.this, "MainActivity : onCreate() ", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onStart() {
        super.onStart();


        bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener(){
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item){

                Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.main_container);

                switch(item.getItemId()){

                    case R.id.action_home :
                        replaceFragment(homeFragment, currentFragment);
                        return true;

                    case R.id.action_search :
                        replaceFragment(search, currentFragment);
                        return true;

                    case R.id.action_center :
                        replaceFragment(centerFragment, currentFragment);
                        return true;

                    case R.id.action_notif :
                        replaceFragment(notification, currentFragment);
                        return true;

                    case R.id.action_profile :
                        replaceFragment(profileFragment, currentFragment);
                        return true;

                    default:
                        return false;
                }
            }
        });
    }

     private void initializeFragment(){

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();

        fragmentTransaction.add(R.id.main_container, homeFragment);
        fragmentTransaction.add(R.id.main_container, search);
        fragmentTransaction.add(R.id.main_container, centerFragment);
        fragmentTransaction.add(R.id.main_container, notification);
        fragmentTransaction.add(R.id.main_container, profileFragment);

        fragmentTransaction.hide(search);
        fragmentTransaction.hide(centerFragment);
        fragmentTransaction.hide(notification);
        fragmentTransaction.hide(profileFragment);

        fragmentTransaction.commit();

    }

//    private void replaceFragment(Fragment fragment){
//        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//
//        fragmentTransaction.replace(R.id.main_container, fragment);
//        fragmentTransaction.commit();
//    }


    private void replaceFragment(Fragment fragment, Fragment currentFragment){

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        if (fragment == homeFragment){

            fragmentTransaction.hide(search);
            fragmentTransaction.hide(centerFragment);
            fragmentTransaction.hide(notification);
            fragmentTransaction.hide(profileFragment);

        }

        if (fragment == search){

            fragmentTransaction.hide(homeFragment);
            fragmentTransaction.hide(centerFragment);
            fragmentTransaction.hide(notification);
            fragmentTransaction.hide(profileFragment);

        }

        if (fragment == centerFragment){

            fragmentTransaction.hide(search);
            fragmentTransaction.hide(homeFragment);
            fragmentTransaction.hide(notification);
            fragmentTransaction.hide(profileFragment);

        }

        if (fragment == notification){

            fragmentTransaction.hide(search);
            fragmentTransaction.hide(centerFragment);
            fragmentTransaction.hide(homeFragment);
            fragmentTransaction.hide(profileFragment);

        }

        if (fragment == profileFragment){

            fragmentTransaction.hide(search);
            fragmentTransaction.hide(centerFragment);
            fragmentTransaction.hide(notification);
            fragmentTransaction.hide(homeFragment);

        }

        fragmentTransaction.show(fragment);

        //fragmentTransaction.replace(R.id.main_container, fragment);
        fragmentTransaction.commit();

    }

Фрагменты создаются в методе MainActivity, и данные не обновляются, потому что эти фрагменты не обновляются новыми данными в методе onResume.

Liem Vo 15.03.2019 02:48

@LiemVo да, .. где onResume ты имеешь в виду? потому что onResume во фрагментах вообще не работает, и если вы имеете в виду onResume в MainActivity, что я должен обновить? потому что на самом деле список данных внутри фрагментов, что я должен обновить в MainActivity onResume?

Bill Gates 17.03.2019 01:36

Я имею в виду onResume во фрагменте.

Liem Vo 17.03.2019 02:16

я пытался, не работает, но я не уверен, почему @LiemVo

Bill Gates 17.03.2019 03:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
48
0

Другие вопросы по теме