with viewpager studio iconos fragments example con activity android layout view tabs

viewpager - ¿Por qué recibo un error al intentar establecer el contenido de una tabspec en Android?



tabs con iconos android (3)

Tengo una actividad de Android en la que estoy usando pestañas.

public class UnitActivity extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.unit_view); TabHost tabHost = getTabHost(); TabSpec spec; spec = tabHost.newTabSpec("controls"); spec.setIndicator("Control"); spec.setContent(R.layout.unit_control); tabHost.addTab(spec); spec = tabHost.newTabSpec("data"); spec.setIndicator("Data"); spec.setContent(R.layout.unit_data); tabHost.addTab(spec); } }

Sin embargo, cuando ejecuto el programa, falla con el error: "No se pudo crear el contenido de la pestaña porque no se pudo encontrar la vista con el ID 2130903042". No entiendo cuál es el problema porque R.layout.unit_data hace referencia a un archivo de diseño en mi directorio de recursos (res / layout / unit_data.xml)

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableLayout android:stretchColumns="*" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Spinner android:id="@+id/unit_num" android:layout_width="fill_parent" android:layout_height="wrap_content" android:prompt="@string/choose_unit"/> <TableRow android:padding="2dp"> <TextView android:gravity="right" android:padding="5dp" android:text="@string/Power"/> <TextView android:id="@+id/unit_power" android:layout_span="3" android:gravity="center" android:padding="5dp" android:background="@android:color/white" android:textColor="@android:color/black" android:text="AUTO"/> </TableRow> ... </TableLayout> </ScrollView>

por lo que puedo decir unit_data.xml está bien formado e incluso lo he referenciado con éxito en otra actividad

class UnitData extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.unit_data); Toast.makeText(this, "Hi from UnitData.onCreate", 5); } }

que no da un error y hace que el diseño sea perfecto.

¿Que esta pasando? ¿Por qué no puedo hacer referencia a este diseño al crear una pestaña?


Mientras que Activity.setContentView toma una identificación de un Layout, TabSpec.setContent toma una identificación de una Vista. Esto significa que debe pasar una identificación que se parece a R.id.something y no a R.layout.something .

Para resolver su problema particular, otorgue a la vista de nivel superior en su diseño una ID de vista:

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/unit_data"> <!-- NOTE THE CHANGE --> ... </ScrollView>

y actualiza tu fuente:

public class UnitActivity extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.unit_view); TabHost tabHost = getTabHost(); TabSpec spec; spec = tabHost.newTabSpec("controls"); spec.setIndicator("Control"); spec.setContent(R.id.unit_control); // NOTE THE CHANGE tabHost.addTab(spec); spec = tabHost.newTabSpec("data"); spec.setIndicator("Data"); spec.setContent(R.id.unit_data); // NOTE THE CHANGE tabHost.addTab(spec); } }

Para obtener más información, consulte los ejemplos de pestañas en ApiDemos :


También debe usar LayoutInflater después de TabHost

LayoutInflater.from (this) .inflate (R.layout.unit_data, tabHost.getTabContentView (), true);

También me quedé atrapado con esto y finalmente lo resolví.


Si tiene el diseño de las pestañas en un archivo diferente, debe inflar el XML.

spec = tabHost.newTabSpec("data"); spec.setIndicator("Data"); // Add the layout to your tab view getLayoutInflater().inflate(R.layout.unit_data, tabHost.getTabContentView(), true); spec.setContent(R.id.unit_data); tabHost.addTab(spec);