EPDPF
24/11/13, 16:57:25
Buenas tardes, estoy desarrollando una aplicación, en la cual al iniciar una actividad aparen unas pestañas (Tabs), dependiendo de la pestaña que se pulse abajo se inicia la actividad asociada a dicha pestaña. Lo que quiero hacer es que la actividad que se inicia tenga también pestañas (Tabs). Os dejo aquí el código que estoy usando, pero me da error, ya que por lo que veo se están inician 2 activities a la vez y es lo que me da error.
Actividad Principal
package es.apli.cincocopas;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TextView;
/*PANTALLA DE BIENVENIDA*/
public class Admin extends TabActivity {
String user;
TextView txt_usr;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.admin);
txt_usr= (TextView) findViewById(R.id.usr_name);
Bundle extras = getIntent().getExtras();
//Obtenemos datos enviados en el intent.
if (extras != null) {
user = extras.getString("user");//usuario
}else{
user="error";
}
txt_usr.setText("Bienvenido administrador " + user);//cambiamos texto al nombre del usuario logueado
Resources res = getResources();
TabHost tabs=(TabHost)findViewById(android.R.id.tabhost);
tabs.setup();
tabs.addTab(tabs.newTabSpec("mitabAdmin").setIndicator(null,res.getDrawable(R.drawable.bot onadmin)).setContent(new Intent(this, OpAdmin.class)));
tabs.addTab(tabs.newTabSpec("mitabHisto").setIndicator(null,res.getDrawable(R.drawable.bot onhistoria)).setContent(new Intent(this, Historia.class)));
tabs.addTab(tabs.newTabSpec("mitabConta").setIndicator(null,res.getDrawable(R.drawable.bot onsaldo)).setContent(new Intent(this, Conta.class)));
tabs.addTab(tabs.newTabSpec("mitabNoti").setIndicator(null,res.getDrawable(R.drawable.btn noticias)).setContent(new Intent(this, Noti.class)));
tabs.setCurrentTab(0);
tabs.getTabWidget().getChildAt(0).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().getChildAt(1).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().getChildAt(2).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().getChildAt(3).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().setStripEnabled(true);
tabs.getTabWidget().setRightStripDrawable(R.drawab le.tab_selector);
tabs.getTabWidget().setLeftStripDrawable(R.drawabl e.tab_selector);
tabs.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
Log.i("AndroidTabsDemo", "Pulsada pestaña: " + tabId);
}
});
}
}
OpAdmin.class
package es.apli.cincocopas;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
public class OpAdmin extends TabActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.opadmin);
Resources res = getResources();
TabHost tabs=(TabHost)findViewById(android.R.id.tabhost);
tabs.setup();
tabs.addTab(tabs.newTabSpec("mitabConta").setIndicator(null,res.getDrawable(R.drawable.bot onsaldo)).setContent(new Intent(this, Conta.class)));
tabs.addTab(tabs.newTabSpec("mitabNoti").setIndicator(null,res.getDrawable(R.drawable.btn noticias)).setContent(new Intent(this, Noti.class)));
tabs.setCurrentTab(0);
tabs.getTabWidget().getChildAt(0).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().getChildAt(1).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().setStripEnabled(true);
tabs.getTabWidget().setRightStripDrawable(R.drawab le.tab_selector);
tabs.getTabWidget().setLeftStripDrawable(R.drawabl e.tab_selector);
tabs.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
Log.i("AndroidTabsDemo", "Pulsada pestaña: " + tabId);
}
});
}
El error que me aparece es el siguiente:
java.lang.RuntimeException: Unable to start activity ComponentInfo{es.apli.cincocopas/es.apli.cincocopas.Admin}: java.lang.RuntimeException: Unable to start activity ComponentInfo{es.apli.cincocopas/es.apli.cincocopas.OpAdmin}: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'
Pero en el layout opadmin.xml, que es donde me da el error tengo una TabHost con el atributo android.R.id.tabhost.
¿Es posible tener pestañas dentro de pestañas, o lo que intento hacer no se puede hacer?
La única pestaña que me da error es la de "mitabAdmin", las demás funcionan perfectamente.
Actividad Principal
package es.apli.cincocopas;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TextView;
/*PANTALLA DE BIENVENIDA*/
public class Admin extends TabActivity {
String user;
TextView txt_usr;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.admin);
txt_usr= (TextView) findViewById(R.id.usr_name);
Bundle extras = getIntent().getExtras();
//Obtenemos datos enviados en el intent.
if (extras != null) {
user = extras.getString("user");//usuario
}else{
user="error";
}
txt_usr.setText("Bienvenido administrador " + user);//cambiamos texto al nombre del usuario logueado
Resources res = getResources();
TabHost tabs=(TabHost)findViewById(android.R.id.tabhost);
tabs.setup();
tabs.addTab(tabs.newTabSpec("mitabAdmin").setIndicator(null,res.getDrawable(R.drawable.bot onadmin)).setContent(new Intent(this, OpAdmin.class)));
tabs.addTab(tabs.newTabSpec("mitabHisto").setIndicator(null,res.getDrawable(R.drawable.bot onhistoria)).setContent(new Intent(this, Historia.class)));
tabs.addTab(tabs.newTabSpec("mitabConta").setIndicator(null,res.getDrawable(R.drawable.bot onsaldo)).setContent(new Intent(this, Conta.class)));
tabs.addTab(tabs.newTabSpec("mitabNoti").setIndicator(null,res.getDrawable(R.drawable.btn noticias)).setContent(new Intent(this, Noti.class)));
tabs.setCurrentTab(0);
tabs.getTabWidget().getChildAt(0).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().getChildAt(1).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().getChildAt(2).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().getChildAt(3).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().setStripEnabled(true);
tabs.getTabWidget().setRightStripDrawable(R.drawab le.tab_selector);
tabs.getTabWidget().setLeftStripDrawable(R.drawabl e.tab_selector);
tabs.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
Log.i("AndroidTabsDemo", "Pulsada pestaña: " + tabId);
}
});
}
}
OpAdmin.class
package es.apli.cincocopas;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
public class OpAdmin extends TabActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.opadmin);
Resources res = getResources();
TabHost tabs=(TabHost)findViewById(android.R.id.tabhost);
tabs.setup();
tabs.addTab(tabs.newTabSpec("mitabConta").setIndicator(null,res.getDrawable(R.drawable.bot onsaldo)).setContent(new Intent(this, Conta.class)));
tabs.addTab(tabs.newTabSpec("mitabNoti").setIndicator(null,res.getDrawable(R.drawable.btn noticias)).setContent(new Intent(this, Noti.class)));
tabs.setCurrentTab(0);
tabs.getTabWidget().getChildAt(0).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().getChildAt(1).setBackgroundRes ource(R.drawable.tab_selector);
tabs.getTabWidget().setStripEnabled(true);
tabs.getTabWidget().setRightStripDrawable(R.drawab le.tab_selector);
tabs.getTabWidget().setLeftStripDrawable(R.drawabl e.tab_selector);
tabs.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
Log.i("AndroidTabsDemo", "Pulsada pestaña: " + tabId);
}
});
}
El error que me aparece es el siguiente:
java.lang.RuntimeException: Unable to start activity ComponentInfo{es.apli.cincocopas/es.apli.cincocopas.Admin}: java.lang.RuntimeException: Unable to start activity ComponentInfo{es.apli.cincocopas/es.apli.cincocopas.OpAdmin}: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'
Pero en el layout opadmin.xml, que es donde me da el error tengo una TabHost con el atributo android.R.id.tabhost.
¿Es posible tener pestañas dentro de pestañas, o lo que intento hacer no se puede hacer?
La única pestaña que me da error es la de "mitabAdmin", las demás funcionan perfectamente.