Reputation: 67
I want to check user if he selected a fragment item [Home, Search, Post, notification, profile] if user selected any of them, I want to disable selecting same activity again prior to the selected fragment activity.
Also in 'Home' activity I have a recyclerview that has X items, if I click home activity again rather than disabling it, I want to move the adapter to view back the first item in recyclerview [Idea inspired from Instagram] when you click home it direct you to the top post.
I tried calling the Ids of the fragmentactivity but could not work
package com.capstone.araba;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.view.MenuItem;
import com.capstone.araba.Fragments.HomeFragment;
import com.capstone.araba.Fragments.NotificationFragment;
import com.capstone.araba.Fragments.ProfileFragment;
import com.capstone.araba.Fragments.SearchFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import java.util.Objects;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
public class MainActivity extends AppCompatActivity {
BottomNavigationView bottom_navigation;
Fragment selectedfragment = null;
private FirebaseUser user;
private static MainActivity mInstance;
public static synchronized MainActivity getInstance() {
return mInstance;
}
public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
ConnectivityReceiver.connectivityReceiverListener = listener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mInstance = this;
bottom_navigation = findViewById(R.id.bottom_navigation);
bottom_navigation.setOnNavigationItemSelectedListener(navigationItemSelectedListener);
Bundle intent = getIntent().getExtras();
if (intent != null){
String publisher = intent.getString("publisherid");
SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
editor.putString("profileid", publisher);
editor.apply();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
} else {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new HomeFragment()).commit();
}
}
private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected( MenuItem item) {
user = FirebaseAuth.getInstance().getCurrentUser();
switch (item.getItemId()){
case R.id.nav_home:
selectedfragment = new HomeFragment();
break;
case R.id.nav_search:
selectedfragment = new SearchFragment();
break;
case R.id.nav_add:
selectedfragment = null;
startActivity(new Intent(MainActivity.this, PostActivity.class));
break;
case R.id.nav_heart:
selectedfragment = new NotificationFragment();
break;
case R.id.nav_profile:
if(user != null) {
SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
editor.putString("profileid", Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid());
editor.apply();
selectedfragment = new ProfileFragment();
break;
}
else{
Intent i = new Intent(MainActivity.this, GuestActivity.class);
startActivity(i);
}
}
if (selectedfragment != null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
selectedfragment).commit();
}
return true;
}
};
}
So the idea behind this is not to let activities always restart or refreshed everytime i click a fragment activity that I am already in...
Upvotes: 0
Views: 128
Reputation: 319
Override onNavigationItemReselected(...)
:
That should solve both problems because when you reselect Search, Post or anything else you don't have that case covered in method that was overridden, so it just won't do anything.
Upvotes: 1
Reputation: 6073
Add an int
veriable let's say int i = 0
( by default home menu ) ...
switch (item.getItemId()){
case R.id.nav_home:
if(i !=0){\\if i = 0 the user already in home so no need to load home fragment
selectedfragment = new HomeFragment();
i = 0 ;
}
break;
case R.id.nav_search:
if(i !=1){
selectedfragment = new SearchFragment();
i = 1 ;
}
break;
}
.....
.....
.....
This way you gonna avoid recreating already visible fragment
Upvotes: 0
Reputation: 517
As your selected fragment changes on each selection, You can do an if statement to check ur current fragment and do as u want like
switch(item.get()){
case R.id.home:
if(selectedFragmnet instance of HomeFragment){
//Do your stuff here
}else{
selectedFragmnet = new HomeFragment();
}
break;
....
....
}
Upvotes: 0