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);