support library last android android-layout android-studio android-support-library

android - library - El diseño gráfico de FragmentTabHost no se procesa



com.android.support:support-v4 28 (5)

El diseño gráfico de un simple android.support.v4.app.FragmentTabHost nunca se procesa en Eclipse o Android Studio.
El error de la consola que recibo es consistentemente:
Exception raised during rendering: No tab known for tag null

Estoy usando el archivo XML más básico:

<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> </android.support.v4.app.FragmentTabHost>

pero el mismo error ocurre.

Solo quería agregar más vistas por encima o por debajo del widget de pestañas y el diseño del marco.
No me importa tanto ver el contenido de la pestaña; Solo quiero ver el resto de mi diseño , pero el problema es que NO SE OTORGAN OTRAS VISTAS cuando un android.support.v4.app.FragmentTabHost reside en el diseño .

He leído y tratado de resolver el problema desde la respuesta a esta publicación:
Android: pestañas en la parte inferior con FragmentTabHost
pero no creo que ese sea mi problema; No estoy buscando poner un TabWidget en la parte inferior.

Todos los demás archivos XML se abren perfectamente.

El mismo problema ocurre en Android Studio:


Desde el diseño, obtengo el mismo error ... por lo tanto, resuelvo ese problema solo por código ... Está funcionando bien ... Pruebe este código

import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTabHost; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class DetailFragment extends Fragment { /****************************************************************************************************************** * Mandatory empty constructor for the fragment manager to instantiate the fragment (e.g. upon screen orientation changes). *****************************************************************************************************************/ public DetailFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // R.layout.fragment_tabs_pager contains the layout as specified in your question View rootView = inflater.inflate(R.layout.fragment_tabs_pager, container, false); // Initialise the tab-host FragmentTabHost mTabHost = (FragmentTabHost) rootView.findViewById(R.id.tabhost); mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent); // Initialise this list somewhere with the content that should be displayed List<String> itemsToBeDisplayed; for (String subItem : itemsToBeDisplayed) { // Give along the name - you can use this to hand over an ID for example Bundle b = new Bundle(); b.putString("TAB_ITEM_NAME", subItem); // Add a tab to the tabHost mTabHost.addTab(mTabHost.newTabSpec(subItem).setIndicator(subItem), YourContentFragment.class, b); } return rootView; } } /******************************************************** This class contains the actual content of a single tab **********************************************************/ public class YourContentFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle extras = getArguments(); if (extras != null) { if (extras.containsKey("TAB_ITEM_NAME")) { String subItem = extras.getString("TAB_ITEM_NAME"); // Do something with that string } } } }


No estoy seguro del error que has tenido (lo siento, estoy muy ocupado ahora, así que no puedo pasar más tiempo chequeando) pero, en general, parece que el FragmentTabHost de las libs de soporte no se preocupa por el xml en absoluto. Ver mi respuesta anterior a otra pregunta:

FragmentTabHost con desplazamiento horizontal


Si U necesita poner pestañas fragmentadas en la parte inferior de la pantalla ... @fallow undermentioned -

Haga su archivo xml así ...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> android:layout_alignParentTop="true" --> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" /> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="wrap_content" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dip" android:layout_height="0dip" android:layout_weight="0" /> </android.support.v4.app.FragmentTabHost> </LinearLayout>

Ahora si su preocupación es abrir varios fragmentos en pestañas fragmentadas individuales ...

@sigue los pasos ::

  1. Crea un fragmento de contenedor. Este fragmento de contenedor será predeterminado para todas las pestañas de tu contenido.
  2. Para cada contenido de pestaña, reemplace el fragmento U que necesita con este contenedor.

Por ejemplo: - Así como reemplazas tu cama con sábanas diferentes ... :)

Su clase de fragmento de contenedor que se usará de manera diferente en diferentes pestañas ... "LearnContainerFragment.java"

public class LearnContainerFragment extends BaseContainerFragment { private boolean mIsViewInited; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.e("test", "tab 1 oncreateview"); return inflater.inflate(R.layout.container_fragment, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.e("test", "tab 1 container on activity created"); if (!mIsViewInited) { mIsViewInited = true; initView(); } } private void initView() { Log.e("test", "tab 1 init view"); replaceFragment(new Learn(), false); } }

LearnContainerFragment.java ---> es el archivo xml container_fragment.xml

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container_framelayout" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout>

@ Cómo usar Conatiner ..

  1. Para cada fragmento, U need será reemplazado con id de este fragmento de contenedor.

@last tu clase BaseContainerFragment.java -

public class BaseContainerFragment extends Fragment { public void replaceFragment(Fragment fragment, boolean addToBackStack) { FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); if (addToBackStack) { transaction.addToBackStack(null); } transaction.replace(R.id.container_framelayout, fragment); transaction.commit(); getChildFragmentManager().executePendingTransactions(); } public boolean popFragment() { Log.e("test", "pop fragment: " + getChildFragmentManager().getBackStackEntryCount()); boolean isPop = false; if (getChildFragmentManager().getBackStackEntryCount() > 0) { isPop = true; getChildFragmentManager().popBackStack(); } return isPop; } }

Espero que ayude ..... ¡Saludos!


Tuve el mismo problema de representación y error de compilación. Solucioné el problema al encontrar que no estaba pasando Fragment cuando estaba creando Addtab. Debe pasar al menos un fragmento en mTabHost.addTab. A continuación está el código de trabajo.

private FragmentTabHost mTabHost; mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); mTabHost.setup(HomeActivity.this, getSupportFragmentManager(), android.R.id.tabcontent); mTabHost.addTab(mTabHost.newTabSpec("home").setIndicator("Home"), HomeFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("mysheets").setIndicator("MySheets")); mTabHost.addTab(mTabHost.newTabSpec("bookmarks").setIndicator("Bookmarks"));


no estoy seguro ... pero ¿no debería su diseño tener una etiqueta tabhost encima del diseño lineal de la pestaña?

<TabHost android:id="@+id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" >

Hace un tiempo creé una aplicación que implementaba pestañas usando tabhost y así es como estaba mi diseño ... una pestaña tenía una vista de calendario, una tenía un selector de imágenes y una tenía una vista de lista ... lo siento, no puedo ser de más ayuda

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" tools:context=".MainActivity" > <TabHost android:id="@+id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" android:orientation="vertical" > <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" > </TabWidget> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/tab1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout> <LinearLayout android:id="@+id/tab2" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageSwitcher android:id="@+id/imageSwitcher1" android:layout_width="match_parent" android:layout_height="251dp" > </ImageSwitcher> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="vertical" /> </LinearLayout> <LinearLayout android:id="@+id/tab3" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <CalendarView android:id="@+id/calendarView1" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </FrameLayout> </LinearLayout> </TabHost>