2014-01-26 2 views
6

Я пытаюсь добавить TabHost Внутри фрагмента ... Кодекс дается bellow.Here внутри фрагмента Я пытаюсь добавить TabHost показать две вкладкиAndroid Добавление вкладки внутри фрагмента

public class TablesFragment extends Fragment { 

TabHost tabHost; 
TabHost.TabSpec spec; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.tables_fragment, container, 
      false); 
    tabHost = (TabHost) rootView.findViewById(android.R.id.tabhost); 
    tabHost.setup(); 

    Intent intentAndroid = new Intent().setClass(getActivity(), 
      NewsFragment.class); 
    spec = tabHost.newTabSpec("Android").setContent(intentAndroid) 
      .setIndicator("Android"); 
    tabHost.addTab(spec); 

    Intent intentBus = new Intent().setClass(getActivity(), NewsFragment.class); 
    spec = tabHost.newTabSpec("Welcome").setIndicator("Welcome") 
      .setContent(intentBus).setIndicator("Welcome"); 
    tabHost.addTab(spec); 
    return rootView; 
} 

}

Это дает мне ошибку ... Нужна помощник с этим кодом ...

LogCat:

01-26 16:21:27.092: E/AndroidRuntime(5597): FATAL EXCEPTION: main 
01-26 16:21:27.092: E/AndroidRuntime(5597): java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'? 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:692) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.widget.TabHost.setCurrentTab(TabHost.java:358) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.widget.TabHost.addTab(TabHost.java:236) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at com.fifaworldcup2014.TablesFragment.onCreateView(TablesFragment.java:31) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at com.fifaworldcup2014.MainActivity.onTabChanged(MainActivity.java:164) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:391) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.widget.TabHost.setCurrentTab(TabHost.java:376) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:546) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.view.View.performClick(View.java:4084) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.view.View$PerformClick.run(View.java:16966) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.os.Handler.handleCallback(Handler.java:615) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.os.Looper.loop(Looper.java:137) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-26 16:21:27.092: E/AndroidRuntime(5597):  at dalvik.system.NativeStart.main(Native Method) 
+0

Я знаю, что это почти год, но работа с v22 Compat библиотека ориентации API17, и с помощью TabLayout, я смог добавить вкладки на активность верхнего уровня, добавьте фрагменты каждой вкладки, а затем добавьте TabLayout к этим фрагментам и получите второй уровень вкладок и добавьте фрагменты к тем (вложенным). При добавлении дочерних фрагментов к фрагменту необходимо использовать [getChildFragmentManager] (http://developer.android.com/reference/android/app/Fragment.html#getFragmentManager()). Я бы представил это как ответ, но у меня нет примеров кода, и я бы закончил тем, что получил downvoted. –

ответ

11

Я бы Если вы ориентируетесь на API17 +, это может сработать для вас. Если нет, вы должны взглянуть на 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; 
} 
+1

public class MainActivity extends FragmentActivity реализует TabHost.OnTabChangeListener – MKDenys

+0

А, моя ошибка. Вы пытаетесь получить вкладку «мастер» в представлении «MainActivity»? Или контроллер вкладки INSIDE фрагмент, для вкладок пользовательского интерфейса внутри одного из фрагментов? – chriskvik

+0

У меня есть вкладки, если MainActivity и я пытаюсь иметь вкладки внутри фрагмента. – MKDenys

2

фотографии ниже кода это, безусловно, поможет вам, если и по-прежнему ищет для ответа & и он будет работать на API 11 для старой версии

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AnalogClock; 
import android.widget.TabHost; 

public class TabFragment extends Fragment { 

    private TabHost mTabHost; 
    View rootView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.tabinterview, container, false); 
     mTabHost = (TabHost) rootView.findViewById(R.id.tabhost); 
     mTabHost.setup(); 
     TabHost.TabSpec spec = mTabHost.newTabSpec("tag"); 
     spec.setIndicator("Android"); 
     spec.setContent(new TabHost.TabContentFactory() { 

      @Override 
      public View createTabContent(String tag) { 
       // TODO Auto-generated method stub 
       return (new AnalogClock(getActivity())); 
      } 
     }); 
     mTabHost.addTab(spec); 
     spec = mTabHost.newTabSpec("tag1"); 
     spec.setIndicator("java"); 
     spec.setContent(new TabHost.TabContentFactory() { 

      @Override 
      public View createTabContent(String tag) { 
       // TODO Auto-generated method stub 
       return (new AnalogClock(getActivity())); 
      } 
     }); 
     mTabHost.addTab(spec); 
     spec = mTabHost.newTabSpec("tag2"); 
     spec.setIndicator("Favourate"); 
     spec.setContent(new TabHost.TabContentFactory() { 

      @Override 
      public View createTabContent(String tag) { 
       // TODO Auto-generated method stub 
       return (new AnalogClock(getActivity())); 
      } 
     }); 
     mTabHost.addTab(spec); 
     return rootView; 
    } 
} 
+2

Как выглядят макеты? – Lion789

0
import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AnalogClock; 
import android.widget.TabHost; 

public class TabFragment extends Fragment { 

    private TabHost mTabHost; 
    View rootView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.tabinterview, container, false); 
     mTabHost = (TabHost) rootView.findViewById(R.id.tabhost); 
     mTabHost.setup(); 
     TabHost.TabSpec spec = mTabHost.newTabSpec("tag"); 
     spec.setIndicator("Android"); 
     spec.setContent(new TabHost.TabContentFactory() { 

      @Override 
      public View createTabContent(String tag) { 
       // TODO Auto-generated method stub 
       return (new AnalogClock(getActivity())); 
      } 
     }); 
     mTabHost.addTab(spec); 
     spec = mTabHost.newTabSpec("tag1"); 
     spec.setIndicator("java"); 
     spec.setContent(new TabHost.TabContentFactory() { 

      @Override 
      public View createTabContent(String tag) { 
       // TODO Auto-generated method stub 
       return (new AnalogClock(getActivity())); 
      } 
     }); 
     mTabHost.addTab(spec); 
     spec = mTabHost.newTabSpec("tag2"); 
     spec.setIndicator("Favourate"); 
     spec.setContent(new TabHost.TabContentFactory() { 

      @Override 
      public View createTabContent(String tag) { 
       // TODO Auto-generated method stub 
       return (new AnalogClock(getActivity())); 
      } 
     }); 
     mTabHost.addTab(spec); 
     return rootView; 
    } 
} 

this code how to give Page Link 
0

В случае, если вы используете: https://stackoverflow.com/a/34224495/1386969

Удостоверьтесь, что схема расположения выглядит так:

<FrameLayout 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" 
tools:context=".view.user.DetailsFragment"> 

<TabHost 
    android:id="@+id/tabhost" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 
    </TabWidget> 

    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent"> 
    </FrameLayout> 
</TabHost> 

Смежные вопросы