Android Fragment, No se encontró ninguna vista para id dentro de TabHost

Tengo una aplicación sencilla de Android con pestañas configuradas utilizando Tabhost y Fragmentos. En una de las páginas de pestaña, el fragmento es un listview. Lo que quiero hacer es cuando un usuario hace clic en uno de los elementos de la vista de lista, abrir una nueva vista con información más específica basada en el elemento pulsado, pero preservándolo para que las pestañas todavía estén allí.

Mi enfoque es cuando un usuario hace clic en un elemento en el listview, se crea un nuevo fragmento y luego de mi clase FragmentActivity principal que posee todos estos fragmentos y maneja la lógica de tabulación, se separará el fragmento que se muestra actualmente y agregue este "nuevo "(singleStationListItem) fragmento. El problema que estoy encontrando es que no puedo agregar mi nuevo fragmento al fragmentTransaction con el R.id.realtabcontent y así, no se agrega correctamente. Yo obtengo:

03-21 10: 50: 01.862: E / FragmentManager (1136): No se encontró ninguna vista para id 0x1010000 (android: attr / theme) para el fragmento singleStationListItem {40d090a0 # 2 id = 0x1010000}

donde R.id.realtabcontent = 0x01010000;

Puedo adjuntarlo sin la identificación, pero entonces los usuarios no pueden volver (llamada addtobackstash ()). He buscado por estos errores, pero otras soluciones no se refieren a tabhost y parece que hacer lo que se requiere, como llamar a setContextView (…) en onCreate () para el archivo xml del diseño que incluye la etiqueta framelayout que estoy tratando de adjuntar mi fragmento a. Puedo agregar mis fragmentos de la lengüeta al R.id.realtabcontent sin un problema. ¿Alguien sabe lo que podría estar causando mi error y cómo puedo solucionarlo?

Nota: Sigo este tutorial para que mis pestañas funcionen. Mi código es muy similar. http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

Mi código: activiy_main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_body" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0" android:padding="5dp" /> <FrameLayout android:id="@+android:id/realtabcontent" <--id that I want to set to android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="-4dp" android:layout_weight="0" android:orientation="horizontal" /> </LinearLayout> </TabHost> </LinearLayout> 

main_activity.java // partes de mi clase de actividad de fragmentos

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Step 1: Inflate layout setContentView(R.layout.activity_main); // Step 2: Setup TabHost initialiseTabHost(savedInstanceState); if (savedInstanceState != null) { mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); //set the tab as per the saved state } } public void onTabChanged(String tag) { //handles tab changes TabInfo newTab = (TabInfo) this.mapTabInfo.get(tag); if (mLastTab != newTab) { FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction(); if (mLastTab != null) { if (mLastTab.fragment != null) { ft.detach(mLastTab.fragment); } } if (newTab != null) { if (newTab.fragment == null) { newTab.fragment = Fragment.instantiate(this, newTab.clss.getName(), newTab.args); ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag); //note it uses the R.id.realtabcontent without any issues here } else { ft.attach(newTab.fragment); } } Log.d("fragment manager in activity: ", "" + ft.isEmpty()); mLastTab = newTab; ft.commit(); this.getSupportFragmentManager().executePendingTransactions(); Log.d("ft ID: ", ft.toString()); } } //This is the callback function inside the listview fragment. I created an interface and it is overwritten in here as suggested by the Android SDK guide public void onStationSelected(String station) { FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction(); ft.addToBackStack(null); ft.addToBackStack(null); //create argument for new fragment that will be created Bundle b = new Bundle(); b.putString("station", station); Fragment displayStationInfo = Fragment.instantiate(this, singleStationListItem.class.getName(), b); Fragment cur = getSupportFragmentManager().findFragmentById(R.id.realtabcontent); ft.detach(cur); ft.add(R.id.realtabcontent, displayStationInfo); <-- this line causes the error ft.commit(); this.getSupportFragmentManager().executePendingTransactions(); } 

singleStationListItem.java está aquí

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle b = this.getArguments(); getActivity().setContentView(R.layout.single_station_item_view); TextView txtStation = (TextView) getActivity().findViewById(R.id.station_label); String station = b.getString("station"); // displaying selected product name Log.d(TAG, "passed in station information: " + station); txtStation.setText(station); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = (LinearLayout)inflater.inflate(R.layout.single_station_item_view, container, false); return v; } 

Cualquier ayuda sería muy apreciada.

Me doy cuenta de que esta pregunta se hizo hace un tiempo, estoy publicando una respuesta para otros que pueden venir a través de esta pregunta.

Por lo que sé, no hay ningún id de Android de 'realtabcontent'. En su XML, elimine la parte 'android' de su id para FrameLayout .

 <FrameLayout android:id="@+id/realtabcontent" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> 

El código XML completo publicado en la documentación del desarrollador es el siguiente:

 <android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0"/> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> 

Buena suerte y codificación feliz!

  • Visualización de la actividad con animación personalizada
  • Cómo cambiar el texto en datepicker?
  • Depuración del código de widgets de Android en Eclipse
  • Android: AppWidget con la vista personalizada no funciona
  • Después de que los botones de cambio de orientación en un widget no responden
  • Google MapView no funciona después de haber firmado la aplicación
  • AlarmManager Bug mientras se restablece / cancela la alarma en el cambio de fecha y hora
  • ¿Configurar el ancho y la altura de ImageView mediante programación?
  • Android cómo usar / mostrar MediaController con SurfaceView y MediaPlayer para video?
  • Acceso a elementos de diseño desde el interior Widget AppWidgetProvider
  • Los widgets que se pueden hacer clic en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.