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();
}
@LiemVo да, .. где onResume ты имеешь в виду? потому что onResume во фрагментах вообще не работает, и если вы имеете в виду onResume в MainActivity, что я должен обновить? потому что на самом деле список данных внутри фрагментов, что я должен обновить в MainActivity onResume?
Я имею в виду onResume во фрагменте.
я пытался, не работает, но я не уверен, почему @LiemVo




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