backcross
backcross

Reputation: 93

How to add tab inside fragment in android?

I try to add tab inside fragment .I can add but the content of particular tab overlap the tab

MainFragmentActivity.java

   public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);     
    Fragment fragment= new FragmentTab();
        getSupportFragmentManager().beginTransaction().add(R.id.content_frame,fragment).commit();
 }

   }

activity_main.xml

<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:orientation="vertical" >

  <FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />  
   </LinearLayout>

FragmentTab.java

 public class FragmentTab extends Fragment {
public FragmentTab() {

}
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

FragmentTabHost mTabHost;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle  
       savedInstanceState) {
    // TODO Auto-generated method stub
    View rootView = inflater.inflate(R.layout.fragment_tabs, container, false);

    mTabHost = (FragmentTabHost) rootView.findViewById(android.R.id.tabhost);
    mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);
    mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("Fragment A"),
            FragmentA.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Fragment B" ),
            FragmentB.class, null);

    return rootView;
}

 }

fragment_tabs.xml

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

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

  </android.support.v4.app.FragmentTabHost>

FragmentA.java

public class FragmentB extends Fragment{

@Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 
           savedInstanceState) {
    View rootView= inflater.inflate(R.layout.fragment_a, container,false);
        return rootView;
}
  }

fragment_a.xml

 <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="FragmentA" />

 </LinearLayout>

FragmentB.java

 public class FragmentB extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle  
            savedInstanceState) {
        View rootView= inflater.inflate(R.layout.fragment_b, container,false);
        return rootView;
}
  }

fragment_b.xml

  <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="FragmentB" />

   </LinearLayout>

Screenshot :

enter image description here

Any help of suggestion would be helpful, I want the content of tab fragment below tab header. The content of fragment overlap the tab header.I use FragmentTabHost to use tab layout in fragmentstrong text Please help me how to solve this issue.I want the content of tab fragment below tab header.

Upvotes: 1

Views: 4266

Answers (1)

Soumil Deshpande
Soumil Deshpande

Reputation: 1632

I believe this could work for you, if you are targeting API17 +. If not you should take a look at ViewContainers, and swipeable views.

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 TabHostParentFragment extends Fragment {

private FragmentTabHost tabHost;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
tabHost = new FragmentTabHost(getActivity());
tabHost.setup(getActivity(), getChildFragmentManager(), R.layout.my_parent_fragment);

Bundle arg1 = new Bundle();
arg1.putInt("Arg for Frag1", 1);
tabHost.addTab(tabHost.newTabSpec("Tab1").setIndicator("Frag Tab1"),
    NewsFragment.class, arg1);

Bundle arg2 = new Bundle();
arg2.putInt("Arg for Frag2", 2);
tabHost.addTab(tabHost.newTabSpec("Tab2").setIndicator("Frag Tab2"),
    MyNestedFragment2.class, arg2);

return tabHost;
}

Upvotes: 3

Related Questions