Matt
Matt

Reputation: 474

OnNavigationItemsSelected Listener is starting the same activity again and again

I am new to Android Development And I am trying to create an application with bottomNavigationView. I have created a separate class to setup the bottomNavigationView for different activities so that I don't have to write the code again and Again. But when I launch the app in an Android device it is starting the Welcome activity again no matter what item I click it start Welcome activity. This is my navigationHelperClass

public class BottomNavigationViewHelper {
private static final String TAG = "BottomNavigationViewHel";

public static void setUpNavigationView(BottomNavigationViewEx bottomNavigationViewEx){
    Log.d(TAG, "setUpNavigationView: setting BottomNavigation");
    bottomNavigationViewEx.enableAnimation(false);
    bottomNavigationViewEx.enableItemShiftingMode(false);
    bottomNavigationViewEx.enableShiftingMode(false);
    bottomNavigationViewEx.setTextVisibility(false);

}
public static void enableNavigation(final Context context, final BottomNavigationViewEx viewEx){
    viewEx.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch(item.getItemId()){
                case R.id.btnHome:
                    viewEx.setSelectedItemId(R.id.btnHome);
                    Intent intent = new Intent(context, Welcome.class);
                    context.startActivity(intent);
                    break;
                case R.id.btnSearch:
                    Intent intent1 = new Intent(context, Chats.class);
                    context.startActivity(intent1);
                    break;
                case R.id.btnPost:
                    Intent intent2 = new Intent(context, Posts.class);
                    context.startActivity(intent2);
                    break;
                case R.id.btnFavourites:
                    Intent intent3 = new Intent(context, Favourites.class);
                    context.startActivity(intent3);
                    break;
                case R.id.btnProfile:
                    Intent intent4 = new Intent(context, Profile.class);
                    context.startActivity(intent4);
                    break;
            }
            return false;
        }
    });

}
}

This is my Welcome activity which starts when I click any of the item of bottomNavigationView.

public class Welcome extends AppCompatActivity { private Context mCntext = Welcome.this;

private static final String TAG = "Welcome";
BottomNavigationViewEx bottomNav;

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcome);
    Log.d(TAG, "onCreate: starting");
    setupBottomNavigationView();

    Menu menu = bottomNav.getMenu();
    MenuItem menuItem = menu.getItem(0);
    menuItem.setChecked(true);

private void setupBottomNavigationView(){
    Log.d(TAG, "setupBottomNavigationView: setting bottomnavigationview");
    bottomNav = findViewById(R.id.nav_bottom);
    BottomNavigationViewHelper.setUpNavigationView(bottomNav);
    BottomNavigationViewHelper.enableNavigation(mCntext, bottomNav);
}
}

This is one of the activities that I have and the code is same for the rest of activities too . This is Profile activitity.

public class Profile extends AppCompatActivity {

private Context mContext = Profile.this;
private static final String TAG = "Search";
BottomNavigationViewEx bottomNav;

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

}

private void setupBottomNavigationView(){
    Log.d(TAG, "setupBottomNavigationView: setting bottomnavigationview");
    bottomNav = findViewById(R.id.nav_bottom);
    BottomNavigationViewHelper.setUpNavigationView(bottomNav);
    BottomNavigationViewHelper.enableNavigation(mContext, bottomNav);
    Menu menu = bottomNav.getMenu();
    MenuItem menuItem = menu.getItem(4);
    menuItem.setChecked(true);
}
@Override
public void setTitle(CharSequence title) {
}
}

Upvotes: 1

Views: 137

Answers (2)

Jaskaran Singh
Jaskaran Singh

Reputation: 157

Do not use bottom navigation with activities instead use Fragments. Create a parent activity which will hold your fragments and then change the fragments in onNavigationItemSelectListener in that case you don't have to manage bottom navigation states and selected item. you can check here how to change fragments How to change fragment with the Bottom Navigation Activity?

Upvotes: 0

Sagar
Sagar

Reputation: 24907

Remove following line:

viewEx.setSelectedItemId(R.id.btnHome);

from case case R.id.btnHome: under onNavigationItemSelected callback.

Upvotes: 1

Related Questions