Android — Изменение видимости вкладки из внутренних действий вкладки

#android #tabs #visibility #switch-statement

#Android #вкладки #видимость #switch-инструкция

Вопрос:

В настоящее время я пытаюсь изменить вкладки изнутри других действий — это очень просто. Однако у меня возникают проблемы при попытке настроить видимость других вкладок.

По сути, у меня загружается приложение на вкладку (страницу входа), а другие вкладки невидимы до тех пор, пока пользователь не войдет в систему.

Когда пользователь входит в систему, я хочу сделать другие вкладки видимыми, а вкладку входа в систему невидимой.

Если есть простой способ сделать это, пожалуйста, сообщите мне об этом — в настоящее время я бегаю по кругу:

Фрагменты кода:

В onCreate на TabHost:

 .....

tabHost.setCurrentTab(3);

tabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE);
tabHost.getTabWidget().getChildAt(1).setVisibility(View.GONE);
tabHost.getTabWidget().getChildAt(2).setVisibility(View.GONE);

....
  

Дополнительные методы TabHost:

 public void switchTab(int tab){
    tabHost.setCurrentTab(tab);
}

public void visibleTabs(){
    tabHost.getTabWidget().getChildAt(0).setVisibility(View.VISIBLE);
    tabHost.getTabWidget().getChildAt(1).setVisibility(View.VISIBLE);
    tabHost.getTabWidget().getChildAt(2).setVisibility(View.VISIBLE);
    tabHost.getTabWidget().getChildAt(3).setVisibility(View.GONE);

}

public void invisibleTabs(){

    tabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE);
    tabHost.getTabWidget().getChildAt(1).setVisibility(View.GONE);
    tabHost.getTabWidget().getChildAt(2).setVisibility(View.GONE);

}
  

Действие на вкладке:

 public class LoginActivity extends Activity {



EditText txt_username;
EditText txt_password;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



   setContentView(R.layout.login);


    Button btn = (Button)this.findViewById(R.id.login_button);

    final EditText txt_username = (EditText) findViewById(R.id.txt_username);
    final EditText txt_password = (EditText) findViewById(R.id.txt_username);


    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            String username = txt_username.getText().toString();
            String password = txt_password.getText().toString(); 

            switchTabInActivity(0);

        }
    });


}

public void switchTabInActivity(long indexTabToSwitchTo){

    waiter ParentActivity = (waiter) this.getParent();
    ParentActivity.visibleTabs();
    ParentActivity.switchTab(0);

}


}
  

LogCat выглядит следующим образом:

 04-12 19:37:49.825: ERROR/AndroidRuntime(2744): FATAL EXCEPTION: main

04-12 19:37:49.825: ERROR/AndroidRuntime(2744): java.lang.NullPointerException

04-12 19:37:49.825: ERROR/AndroidRuntime(2744):     at android.waiter.waiter.visibleTabs(waiter.java:130)

04-12 19:37:49.825: ERROR/AndroidRuntime(2744):     at android.waiter.LoginActivity.switchTabInActivity(LoginActivity.java:56)

04-12 19:37:49.825: ERROR/AndroidRuntime(2744):     at android.waiter.LoginActivity$1.onClick(LoginActivity.java:44)
  

Очевидно, что исключение происходит из настроек невидимости / видимости.

Ответ №1:

Я не знаю, tabHost.getTabWidget().getChildAt(0) правильно ли это сделать. Вы пробовали присваивать вкладкам индивидуальный идентификатор?

в качестве альтернативы, если вы хотите попытаться отследить точное местоположение ошибки, укажите кучу точек останова и запустите ее в режиме отладки.

О, Button btn = (Button)this.findViewById(R.id.login_button); я полагаю, что можно обойтись без «этого» (хотя я могу ошибаться …. fwiw я никогда не использовал this в объявлении кнопки)

Комментарии:

1. Спасибо за помощь, @Rasman, я разобрался с проблемой! Мне просто нужно было объявить TabHost в TabHost в двух пользовательских методах TabHost. Это решило проблему.