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

1

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

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

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

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

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

В TabHost OnCreate:

.....

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)

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

  • 0
    спасибо, ваш вопрос мне очень помог
Теги:
switch-statement
tabs
visibility

1 ответ

0

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

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

Oh Button btn = (Button)this.findViewById(R.id.login_button); Я уверен, что обойтись без "this" (хотя я мог ошибаться.... fwiw я никогда не использовал this в объявлении кнопки)

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню