因此,我有3個Sherlock Fragments安裝程序,並且與ViewPageIndicator一起正常工作。我現在想要做的就是將一個TabHost放在其中一個碎片中,以便它顯示2個單獨的標籤(在底部)。我相信這意味着我需要將更多碎片放入由TabHost控制的第三片碎片內。使用ViewPageIndicator的SherlockFragment內部的Tabhost
考慮到TabHost需要在片段內創建,我不確定如何正確地創建它。
這裏是我已經得到了從this tutorial工作的片段,我已經嘗試更新添加TabHost失敗代碼:
TestFragment3.java
public class TestFragment3 extends SherlockFragment {
private String mContent = "none";
public static TestFragment3 newInstance(String text) {
TestFragment3 fragment = new TestFragment3();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putString(KEY_TAB_NUM, text);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, null);
String text = getString(R.string.tab_page_num) + mContent;
((TextView)view.findViewById(R.id.text)).setText(text);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContent = getArguments() != null ? getArguments().getString(KEY_TAB_NUM) : "none";
}
}
MainActivity.java
public class MainActivity extends SherlockFragmentActivity {
private static final String[] TAB_TITLES = new String[] { "This", "Is", "A", "ViewPager" };
TestFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_tabs);
mAdapter = new TestFragmentAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
class TestFragmentAdapter extends FragmentPagerAdapter {
private int mCount = TAB_TITLES.length;
public TestFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return TestFragment.newInstance(String.valueOf(position));
}
@Override
public int getCount() {
return mCount;
}
@Override
public CharSequence getPageTitle(int position) {
return TAB_TITLES[position];
}
}
}
是否需要創建一個新的SherlockFragmentActivity並將2個額外的SherlockFragments添加到該TabHost?如果是這樣,我如何設置3個片段的MainActivity來爲其第三個片段使用另一個Activity而不是片段?
我得到這個錯誤試圖把一個片段中的片段......
11-14 19:10:54.271: E/AndroidRuntime(2812): java.lang.IllegalStateException: Recursive entry to executePendingTransactions
11-14 19:10:54.271: E/AndroidRuntime(2812): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1388)
11-14 19:10:54.271: E/AndroidRuntime(2812): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
11-14 19:10:54.271: E/AndroidRuntime(2812): at com.example.demolistview.EventInviteesFragment$TabManager.onTabChanged(EventInviteesFragment.java:152)
11-14 19:10:54.271: E/AndroidRuntime(2812): at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:391)
11-14 19:10:54.271: E/AndroidRuntime(2812): at android.widget.TabHost.setCurrentTab(TabHost.java:376)
11-14 19:10:54.271: E/AndroidRuntime(2812): at android.widget.TabHost.addTab(TabHost.java:236)
...
...
...
這是完美的!起初我一直在努力,因爲當我通過SDK管理器下載時,android-support-v4.jar沒有在我的項目中自動更新。但是,由於沒有XML佈局來定義Tabwidget,我怎樣才能在底部對齊呢? – jamis0n
我還沒試過,但即時通訊猜測你可以在xml佈局文件中定義TabHost,並使用onCreateView中的LayoutInflater來擴充佈局,然後你可以通過id找到TabHost並添加所需的片段。 –
沒有運氣。即使我膨脹佈局並從膨脹佈局中獲取tabhost,選項卡仍保留在頂部。 – jamis0n