Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android FragmentTabHost : No tab known for tag null

I used below code and it is not render graphical layout. display error as Exception raised during rendering: No tab known for tag null.

how can i solve this ?

<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:layout_width="match_parent"         android:layout_height="match_parent"         android:orientation="vertical" >          <TabWidget             android:id="@android:id/tabs"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:layout_weight="0"             android:orientation="horizontal" />          <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> 
like image 819
Bishan Avatar asked Mar 12 '13 05:03

Bishan


2 Answers

This is the code that I've used to initialise the TabHost and it works fine:

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             }         }     } } 
like image 136
Alexander Pacha Avatar answered Oct 02 '22 18:10

Alexander Pacha


It seems there is a bug in android support library.

I finally found this workaround:

Changed layout file as this one:

 <LinearLayout     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical" >      <TabWidget         android:id="@android:id/tabs"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_weight="0"         android:orientation="horizontal" />      <FrameLayout         android:id="@android:id/tabcontent"         android:layout_width="0dp"         android:layout_height="0dp"         android:layout_weight="0" />  </LinearLayout> 

Then i created by code FragmentTabHost as this example:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {     tabHost = new FragmentTabHost(getActivity());     inflater.inflate(R.layout.logs_view, tabHost);     tabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);      tabHost.addTab(tabHost.newTabSpec("simple").setIndicator("Simple"), ActivityLogFragment.class, null);     tabHost.addTab(tabHost.newTabSpec("contacts").setIndicator("Contacts"), MiniStatementFragment.class, null);     return tabHost; } 
like image 26
user3216049 Avatar answered Oct 02 '22 19:10

user3216049