viewpager studio fragments example and activity android fragment android-tabs

studio - ¿Agregar pestaña dentro de Fragment en Android?



tabs android material design (2)

Estoy tratando de agregar un TabHost dentro de un Fragmento. El código se da a continuación. Aquí dentro del Fragmento. Estoy intentando agregar TabHost para mostrar dos pestañas:

package com.nordicsoft.dilosysNewVersion; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TabHost; public class Fragment_Coupons extends Fragment { TabHost tabHost; TabHost.TabSpec spec; public Fragment_Coupons() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_coupon, container, false); tabHost = (TabHost) rootView.findViewById(android.R.id.tabhost); tabHost.setup(); //Add_Text_To_Tab("Android", "IOS"); Intent intentAndroid = new Intent().setClass(getActivity(), Aclass.class); spec = tabHost.newTabSpec("Android").setContent(intentAndroid) .setIndicator("Android"); tabHost.addTab(spec); Intent intentBus = new Intent().setClass(getActivity(), Bclass.class); spec = tabHost.newTabSpec("Welcome").setIndicator("Welcome") .setContent(intentBus).setIndicator("Welcome"); tabHost.addTab(spec); return rootView; } }

El código XML:

<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout> </TabHost>

Esto me está dando el error:

12-09 17:40:53.509: E/AndroidRuntime(18103): FATAL EXCEPTION: main 12-09 17:40:53.509: E/AndroidRuntime(18103): java.lang.IllegalStateException: Did you forget to call ''public void setup(LocalActivityManager activityGroup)''? 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:690) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.widget.TabHost.setCurrentTab(TabHost.java:356) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.widget.TabHost.addTab(TabHost.java:246) 12-09 17:40:53.509: E/AndroidRuntime(18103): at com.nordicsoft.dilosysNewVersion.Fragment_Coupons.onCreateView(Fragment_Coupons.java:32) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.BackStackRecord.run(BackStackRecord.java:622) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.os.Handler.handleCallback(Handler.java:605) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.os.Handler.dispatchMessage(Handler.java:92) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.os.Looper.loop(Looper.java:137) 12-09 17:40:53.509: E/AndroidRuntime(18103): at android.app.ActivityThread.main(ActivityThread.java:4517) 12-09 17:40:53.509: E/AndroidRuntime(18103): at java.lang.reflect.Method.invokeNative(Native Method) 12-09 17:40:53.509: E/AndroidRuntime(18103): at java.lang.reflect.Method.invoke(Method.java:511) 12-09 17:40:53.509: E/AndroidRuntime(18103): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 12-09 17:40:53.509: E/AndroidRuntime(18103): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 12-09 17:40:53.509: E/AndroidRuntime(18103): at dalvik.system.NativeStart.main(Native Method) 12-09 17:46:02.770: I/Process(18103): Sending signal. PID: 18103 SIG: 9


Intenta hacer esto para manejar las pestañas:

public class MainFragment extends Fragment { private FragmentTabHost mTabHost; //Mandatory Constructor public MainFragment() { } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 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 B"), FragmentB.class, null); mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Fragment C"), FragmentC.class, null); mTabHost.addTab(mTabHost.newTabSpec("fragmentd").setIndicator("Fragment D"), FragmentD.class, null); return rootView; } }

Con el diseño:

<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"> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> </android.support.v4.app.FragmentTabHost>

The MotherActivity para alojar el MainFragment:

public class MotherActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MainFragment fragmenttab = new MainFragment(); getSupportFragmentManager().beginTransaction() .add(R.id.item_detail_container, fragmenttab).commit(); }

Y diseño de MotherActivity:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/item_detail_container" android:layout_width="match_parent" android:layout_height="match_parent" />

Después de esto simplemente crea el fragmento normal B y C, etc. Clase. El resultado será:


Prueba agregar esta línea

tabHost.setup(this.getActivity().getLocalActivityManager());

antes de la línea

tabHost.addTab(spec);

o intente agregar:

LocalActivityManager mLocalActivityManager = new LocalActivityManager(this.getActivity(), false); mLocalActivityManager.dispatchCreate(savedInstanceState); host.setup(mLocalActivityManager);