Aby łatwo przełączać się między fragmentami, jestem osadzanie HorizontalScrollView do mojego układu Tab tak:HorizontalScrollView w TabHost dodanie dodatkowej przestrzeni na końcu
<?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="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="none" >
<TabWidget android:id="@android:id/tabs"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</TabWidget>
</HorizontalScrollView>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</TabHost>
Ale po dodaniu Fragments w moim kodu (pokazane poniżej) tam nagle pojawia się dodatkowe spacje na końcu HorizontalScrollView:
Przed przewijanie
Po przewijanie
Kod jest dość skomplikowane, ale postaram się pokazać ważnych części.
{
mTabHost = (TabHost) childLayout.findViewById(android.R.id.tabhost);
mTabHost.setup();
FrameLayout tabsFL = (FrameLayout) childLayout.findViewById(android.R.id.tabcontent);
tabsFL.setId(TABS_FRAME_ID);
for (int i = 0; i < list.size(); i++) {
mTabHost.addTab(newTab(String.valueOf(i), list.get(i).getTitle(), tabsFL.getId()));
}
mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
updateTab(tabId, Integer.parseInt(tabId), list);
}
});
//manually load first fragment
mTabHost.setCurrentTab(mCurrentTab);
updateTab(String.valueOf(mCurrentTab), mCurrentTab, list);
}
private TabSpec newTab(String tag, String tabLabel, int tabContentId) {
int count = Integer.parseInt(tag);
count +=1;
View indicator = inflater.inflate(R.layout.details_tab,
(ViewGroup) childLayout.findViewById(android.R.id.tabs), false);
((TextView) indicator.findViewById(R.id.text)).setText(count + ". " + tabLabel);
TabSpec tabSpec = mTabHost.newTabSpec(tag);
tabSpec.setIndicator(indicator);
tabSpec.setContent(tabContentId);
return tabSpec;
}
private void updateTab(String tabId, int id, ArrayList<CustomObject> frags) {
mCurrentTab = id;
FragmentManager fm = activity.getSupportFragmentManager();
fm.beginTransaction()
.replace(TABS_FRAME_ID, DetailsFragment.newInstance(frags.get(id)), tabId)
.commitAllowingStateLoss();
}
również niepowiązane, ale ja też mam problem gdzie pierwsza zakładka nie jest ładowany ręcznie (kliknięcie zakładki ładuje Fragmenty doskonale, po prostu bardzo pierwsza nie ładuje z jakiegoś powodu).
To może być ze względu na 'android: fillViewport = "true"' w 'HorizontalScrollView', spróbuj usunąć je za przykład i sprawdź, czy to działa. Zarówno 'HorizontalScrollView' jak i' TabWidget' mają 'android: layout_height =" wrap_content "', więc powodem może być 'fillViewport'. – g00dy
Niestety, próbowałem tego i nie miało to żadnego znaczenia. Pomyślałem, że może przypadkowo dodaję dodatkową (niewidoczną?) Zakładkę, ale nie mogę znaleźć, gdzie to może się dziać z wyciągami z dziennika. –
Może jest w środku 'tabsFL'? Nie wiem, ale być może ostatnia Taba jest na wpół niewidoczna, to też się czuje :) – g00dy