#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. Это решило проблему.