android - recientemente - eliminar todas las ventanas abiertas
Android: cambiar la visibilidad de las pestañas desde las actividades de la pestaña interior (1)
Actualmente estoy intentando cambiar las pestañas de otras actividades, eso es sencillo. Sin embargo, estoy teniendo problemas al intentar establecer la visibilidad de otras pestañas.
Básicamente, tengo una carga de aplicación en una pestaña (página de inicio de sesión) y las otras pestañas son invisibles hasta que el usuario inicia sesión.
Cuando el usuario inicia sesión, quiero que las otras pestañas sean visibles y la pestaña de inicio de sesión invisible.
Si hay una forma sencilla de hacerlo, por favor avíseme. Actualmente estoy dando vueltas en círculos:
Fragmentos de código:
En OnCreate de 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);
....
Los métodos adicionales de 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);
}
La actividad de la pestaña:
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 es lo siguiente:
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)
Es obvio que la excepción proviene de la configuración invisible / visible.
No sé si tabHost.getTabWidget().getChildAt(0)
es la forma correcta de hacerlo. ¿Has intentado darle a las pestañas una identificación individual?
alternativamente, si quiere probar y rastrear la ubicación exacta del error, ejecute un montón de puntos de interrupción y ejecútelo en modo Depuración.
Oh Button btn = (Button)this.findViewById(R.id.login_button);
Creo que puedo prescindir de un "esto" (aunque podría estar equivocado ... desde que nunca lo usé en una declaración de botón)