У меня проблемы с методом onBackPressed();
. Мне нужно, чтобы значки BottomNavView
менялись в зависимости от того, какой Fragment
пользователь попадает при вызове onBackPressed();
. Этого сейчас не происходит с кодом, который у меня есть. Я пробовал несколько разных способов реализовать этот код, но ничего не помогло. Итак, два самых больших результата, которые я получаю, - это если я дважды назову super.onBackPressed();
изменение BNV icons
, НО изображения в одном из моих Fragments
вернутся дублированными, и я не знаю, почему ...
Итак, если я избавлюсь от одного из onBackPressed();
, значки BNV не меняются на onBackPressed();
, я подумал, что, возможно, мне следует изменить instanceOf in onBackPressed();
на polymorphism
. .. Я видел, что это то, что люди сделали вместо instanceOf
... Я не знаю, решит ли это мою проблему. Может ли кто-нибудь сообщить мне, что они думают?
Может, есть onBackPressedListener or fragmentListener
, который я мог бы реализовать, чтобы этот код работал?
Самое странное, что изображения возвращаются вдвое всего за ОДИН из моих фрагментов ... Все остальные в порядке.
MainActivity
private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener = menuItem -> {
switch (menuItem.getItemId()) {
case R.id.nav_home:
mSelectedFragment = new TabLayoutFragment();
break;
case R.id.nav_notifications:
seenNotification();
mSelectedFragment = new NotificationsFragment();
break;
case R.id.nav_profile:
SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
editor.putString("profileid", mFirebaseUser.getUid());
editor.apply();
mSelectedFragment = new ProfileFragment();
break;
case R.id.nav_save:
mSelectedFragment = new AttendingEventFragment();
break;
}
if (mSelectedFragment != null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mSelectedFragment, null).addToBackStack(null).commit();
}
return true;
};
@Override
public void onBackPressed() {
if (mDrawer.isDrawerOpen(GravityCompat.START)) {
mDrawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (fragment instanceof TabLayoutFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_home);
} else if (fragment instanceof AttendingEventFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_save);
} else if (fragment instanceof NotificationsFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_notifications);
} else if (fragment instanceof ProfileFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_profile);
}
super.onBackPressed();
}
EventFragment ЭТО ОДИН ГДЕ ИЗОБРАЖЕНИЯ ВЕРНУТЬСЯ В ДВОЙНОЙ. ТОЛЬКО ОДИН, ГДЕ ЭТО ПРОИСХОДИТ ...
public class AttendingEventFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
private List<String> mEvent;
private List<Post> mPostList;
private String mPostId;
private EventsImagesAdapter mEventsImagesAdapter;
private FirebaseUser mFirebaseUser;
private TextView mNoEvents;
private ImageView mBackArrow;
private SwipeRefreshLayout mSwipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_attending_event, container, false);
mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
mNoEvents = view.findViewById(R.id.no_events);
mBackArrow = view.findViewById(R.id.arrow_back);
SharedPreferences sharedPreferences = getContext().getSharedPreferences("PREFS", Context.MODE_PRIVATE);
mPostId = sharedPreferences.getString("postid", "none");
RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new GridLayoutManager(getContext(), 3);
recyclerView.setLayoutManager(linearLayoutManager);
mPostList = new ArrayList<>();
mEventsImagesAdapter = new EventsImagesAdapter(getContext(), mPostList);
recyclerView.setAdapter(mEventsImagesAdapter);
((DrawerLocker) getActivity()).setDrawerLocked(true);
mSwipeRefreshLayout = view.findViewById(R.id.refresh);
mSwipeRefreshLayout.setOnRefreshListener(this);
mSwipeRefreshLayout.post(() -> {
mSwipeRefreshLayout.setRefreshing(true);
mySaves();
});
setBackArrow();
return view;
}
@Override
public void onDestroy() {
((DrawerLocker) getActivity()).setDrawerLocked(false);
super.onDestroy();
}
private void mySaves() {
mEvent = new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Attending Event");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (snapshot.hasChild(mFirebaseUser.getUid()))
mEvent.add(snapshot.getKey());
}
Log.d("READSAVES", String.valueOf(mEvent));
readSaves();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void readSaves() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mPostList.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Post post = snapshot.getValue(Post.class);
for (String id : mEvent) {
if (post != null)
if (post.getPostid().equals(id)) {
mPostList.add(post);
}
}
}
Log.d("SAVES", mPostList.toString());
if (mPostList.size() == 0) {
mNoEvents.setVisibility(View.VISIBLE);
} else {
mNoEvents.setVisibility(View.GONE);
}
mEventsImagesAdapter.notifyDataSetChanged();
Collections.reverse(mPostList);
mSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
mSwipeRefreshLayout.setRefreshing(false);
}
});
}
private void setBackArrow() {
mBackArrow.setOnClickListener(v -> getActivity().getSupportFragmentManager().popBackStack());
}
@Override
public void onRefresh() {
mySaves();
}
}