Фрагмент не открывается с условием

Emmanuel Okocha спросил: 28 марта 2018 в 03:30 в: java

У меня есть оператор if, когда i выбрана позиция 3, которая проверяет условие, если конкретный ключ был сохранен в tinyDB (форма общих настроек), чтобы открыть конкретный фрагмент, это условие истинно (я проверил это с System.out.println(tiny.getString("userSignedIn");, но фрагмент не открывается. Условие в позиции 3 в коде. Чем больше вы

bottomNavigation.setOnTabSelectedListener(new AHBottomNavigation.OnTabSelectedListener() {
        @Override
        public boolean onTabSelected(int position, boolean wasSelected) {
            switch (position){
                case 0:
                    Home home = new Home();
                    doTransation(home);
                    break;
                case 1:
                    Categories categories = new Categories();
                    doTransation(categories);
                    break;
                case 2:
                    MyDownloads myDownloads = new MyDownloads();
                    doTransation(myDownloads);
                    break;
                case 3:
                    if (getUserSignedIn.equals("Sign up Successful")){
                        UserSignedInProfile userSignedInProfile = new UserSignedInProfile();
                        doTransation(userSignedInProfile);
                    }else if (getUserSignedIn.equals("Email address or password not correct")){
                        Profile profile = new Profile();
                        doTransation(profile);
                   }
                   break;
                default:
                     Profile profile = new Profile();
                     doTransation(profile);
                     break;
            }
            return true;
        }
    });

Это метод doTransation

 private void doTransation(Fragment fragment){
    android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
    fragmentTransaction.replace(R.id.parentLayout, fragment);
    moreOptions.setImageResource(R.drawable.ic_more);
    moreOptions.setVisibility(View.VISIBLE);
    text_changer.setText(R.string.app_name);
    fragmentTransaction.commit();
}

Я пробовал оператор switch, но он все еще не работает

2 ответа

Ivan Shero ответил: 28 марта 2018 в 04:04

try

String [] posts = { "1","2","3"};
ArrayAdapter<String> adapter;
switch (position){
case 0:
break;
}

вместо if & else

или измените последний параметр на} else (position == 3) {вместо} else if (позиция == 3) {Я думаю, он преуспеет

zgc7009 ответил: 28 марта 2018 в 06:14

Итак, краткий ответ: "Если сравнение не оценивается, попытайтесь, когда вы этого ожидаете". Это связано с тем, что getUserSignedIn не равен строковому значению "Зарегистрироваться успешно". Это скорее опечатка, мы все их делаем. Если это поможет вам в операторе if (используйте журнал отладки или точку останова), тогда давайте начнем проверять ваш фрагмент на наличие проблем.

Но пока мы работаем над этим, StackOverflow предназначен для обучения, и, как вы можете видеть, Исходя из ваших начальных комментариев, ваш код может использовать некоторую очистку:

bottomNavigation.setOnTabSelectedListener(new AHBottomNavigation.OnTabSelectedListener() {
    @Override
    public boolean onTabSelected(int position, boolean wasSelected) {        // This is where we can start, you are instantiating a 
        // fragment in your switch statement, so let's start
        // with a fragment variable that we will set in the switch
        // and pass to our method
        Fragment fragment;        // Now in our switch statement, we simply set our fragment
        switch (position){
            case 0:
                fragment = new Home();
                break;
            case 1:
                fragment = new Categories();
                break;
            case 2:
                fragment = new MyDownloads();
                break;
            case 3:
                if (getUserSignedIn.equals("Sign up Successful")){
                    fragment = new UserSignedInProfile();
                    break; // break here so else goes to default
                }
                /* You don't need this since you are just going
                   to default to the Profile fragment
                else if (getUserSignedIn.equals("Email address or password not correct")){
                }
                */
                // Notice no break here, it is in the if condition
            default:
                fragment = new Profile();
        }        doTransition(profile);  // I think you mean "Transition"(?)
        return true;
    }
});

Теперь, если вы хотите стать действительно модным, и вы понимаете и можете читать код ясно, вы можете получить всю троицу в этом плохом мальчике. Тернарные операторы, где вы в основном говорите [Thing] = (if)? x: y; но его можно объединить в сумасшедшие вещи:

Fragment fragment = position == 0 ? new Home() :
    positon == 1 ? new Categories() :
    position == 2 ? new MyDownloads() :
    position == 3 && getUserSignedIn.equals("Sign up Successful") ? 
        new UserSignedInProfile() :
    new Profile();doTransition(fragment);

Пойдем еще дальше. Собираетесь ли вы когда-нибудь снова использовать эту переменную фрагмента? Нет? Зачем создавать это?

doTransition(
    position == 0 ? new Home() :
    position == 1 ? new Categories() :
    position == 2 ? new MyDownloads() :
    position == 3 && getUserSignedIn.equals("Sign up Successful") ? 
        new UserSignedInProfile() :
    new Profile();
);