Android - Изменение видимости вкладки из внутренних вкладок - PullRequest
1 голос
/ 13 апреля 2011

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

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

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

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

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

В OnSreate 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 Ответ

0 голосов
/ 13 апреля 2011

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

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

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

...