Я не могу переключаться между вкладками на нижней панели навигации в моем приложении - PullRequest
0 голосов
/ 28 мая 2020

У меня довольно сложная задача, я следил за некоторым учебным проектом, но когда мы дошли до точки добавления нижней панели навигации, я застрял здесь на несколько недель, пытаясь понять, в чем проблема. Действие загружается успешно, но я не могу переключаться между различными вкладками на нижней панели навигации, а именно: «Главная», «Добавить» и «Выход».

Вот мой код для действия.

public class SellerHomeActivity extends AppCompatActivity {

private TextView mTextMessage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_seller_home);
    BottomNavigationView navView = findViewById(R.id.nav_view);
    navView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            switch (item.getItemId()) {

                case R.id.navigation_home:
                    mTextMessage.setText(R.string.title_home);
                    return true;

                case R.id.navigation_add:
                    Intent intentCategory = new Intent(SellerHomeActivity.this, SellerProductCategoryActivity.class);
                    startActivity(intentCategory);
                    return true;

                case R.id.navigation_logout:
                    final FirebaseAuth mAuth;
                    mAuth = FirebaseAuth.getInstance();
                    mAuth.signOut();

                    Intent intentMain = new Intent(SellerHomeActivity.this, MainActivity.class);
                    intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intentMain);
                    finish();
                    return true;
            }

            return false;

        }
    });
    // Passing each menu ID as a set of Ids because each
    // menu should be considered as top level destinations.
    AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
            R.id.navigation_home, R.id.navigation_add, R.id.navigation_logout)
            .build();
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);

/ / NavigationUI.setupActionBarWithNavController (это, navController, appBarConfiguration); NavigationUI.setupWithNavController (navView, navController); }

}

Любая оказанная помощь будет очень полезна для меня, заранее спасибо

Ответы [ 3 ]

0 голосов
/ 28 мая 2020

Другой подход, который я могу предложить, сделать BottomNavigationView navView publi c stati c и добавить еще OnNavigationItemSelectedListener в ваш SellerProductCategoryActivity.

В этом случае первое действие должно выглядеть так:

public class SellerHomeActivity extends AppCompatActivity {

public static TextView mTextMessage;
public static BottomNavigationView navView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seller_home);
navView = findViewById(R.id.nav_view);
navView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()) {

            case R.id.navigation_home:

                return true;

            case R.id.navigation_add:
                Intent intentCategory = new Intent(SellerHomeActivity.this, SellerProductCategoryActivity.class);
                startActivity(intentCategory);
                return true;

            case R.id.navigation_logout:
                final FirebaseAuth mAuth;
                mAuth = FirebaseAuth.getInstance();
                mAuth.signOut();

                Intent intentMain = new Intent(SellerHomeActivity.this, MainActivity.class);
                intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(intentMain);
                finish();
                return true;
        }

        return false;

    }
});
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
        R.id.navigation_home, R.id.navigation_add, R.id.navigation_logout)
        .build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);

И слушатель на SellerProductCategoryActivity должен быть таким:

SellerHomeActivity.navView.setOnNavigationItemSelectedListener(new 
BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()) {

            case R.id.navigation_home:
                SellerHomeActivity.mTextMessage.setText(R.string.title_home);
                Intent intentCategory = new Intent(SellerProductCategoryActivity.this, 
                SellerHomeActivity.class);
                startActivity(intentCategory);
                return true;

            case R.id.navigation_add:
                return true;

            case R.id.navigation_logout:
                final FirebaseAuth mAuth;
                mAuth = FirebaseAuth.getInstance();
                mAuth.signOut();

                Intent intentMain = new Intent(SellerHomeActivity.this, MainActivity.class);
                intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(intentMain);
                finish();
                return true;
        }

        return false;

    }
});
0 голосов
/ 28 мая 2020

Прежде всего, нижняя навигация должна работать лучше всего с фрагментами. попробуйте использовать фрагменты вместо активности, а также я внес небольшие изменения, которые на самом деле не имеют значения, но я попытался создать тот же шаблон, что и я. поэтому в моем коде вместо активности были фрагменты, а все остальное то же самое. Надеюсь, это должно вам помочь, и все должно работать.

    public class SellerHomeActivity extends AppCompatActivity {

    private TextView mTextMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_seller_home);

        BottomNavigationView navView = findViewById(R.id.nav_view);

        navView.setOnNavigationItemSelectedListener(navListner);

        BottomNavigationView.OnNavigationItemSelectedListener navListner = new BottomNavigationView.OnNavigationItemSelectedListener() {

            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                switch (item.getItemId()) {

                    case R.id.navigation_home:
                        mTextMessage.setText(R.string.title_home);
                        break;

                    case R.id.navigation_add:
                        Intent intentCategory = new Intent(
                            SellerHomeActivity.this,
                            SellerProductCategoryActivity.class);
                        startActivity(intentCategory);
                        break;

                    case R.id.navigation_logout:
                        final FirebaseAuth mAuth;
                        mAuth = FirebaseAuth.getInstance();
                        mAuth.signOut();

                        Intent intentMain = new Intent(SellerHomeActivity.this, MainActivity.class);
                        intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(intentMain);
                        finish();
                        break;
                }
                return true;
            }
        });

    AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
            R.id.navigation_home, R.id.navigation_add, R.id.navigation_logout
        )
        .build();
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
}
0 голосов
/ 28 мая 2020

Когда вы go на SellerProductCategoryActivity, у вас больше нет доступа к оператору switch, в котором вы должны переключать вкладки, потому что он находится в SellerHomeActivity.

А также у вас нет переключитесь на любые вкладки здесь:

 case R.id.navigation_home:
                mTextMessage.setText(R.string.title_home);
                return true;

Вы просто установили текст в TextView, но на самом деле вам нужно перейти на вкладку «Главная».

Мое предложение - создать Activity для удержания оператора switch . И преобразуйте два ваших действия, SellerProductCategoryActivity и SellerHomeActivity, во фрагмент. Внутри кейсов оператора switch просто переключите фрагменты.

Более того, не рекомендуется иметь элемент BottomNavigationView для функции выхода из системы.

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