ListView во фрагменте не обновляется при перемещении между фрагментами - PullRequest
0 голосов
/ 13 марта 2019

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

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

EAT
DRINK
POOP

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

DONALD TRUMP
BARRACK OBAMA
GEORGE BUSH

при выводе из меня происходит успешное получение результата,

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

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

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

ListView показать нежелательный результат ВОСХОДЯЩИЙ

// wrong
POOP
DRINK
EAT

// true
EAT
DRINK
EAT

и второй запрос вообще отсутствует,

Я очень благодарен за ваш ответ.Прежде чем показывать код после этого, вот что происходит, поэтому перейдите в раздел «Активность» и затем выполните успешное обновление, потому что я поместил фрагменты в «MainActivity», поэтому:1048 * -> снова вызвать onCreate в MainActivity FragmentA -> FragmentB -> не вызывать 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.class

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();

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