我的用例如下:
我必须从Web端点获取一些数据,我必须向TabHost
添加标签。每个选项卡都有一个listview
,它将进一步填充来自不同Web服务的数据。到目前为止,我能够在TabHost中动态添加标签,并且listview也正确填充。第一次运行时一切正常。现在,当我点击列表视图中的某个项目时,会打开其详细视图。现在,如果我按下后退按钮,我会在屏幕上显示标签视图。此时,选项卡下的列表视图消失了。
我不明白为什么会这样。我在代码中使用片段和FragmentStatePagerAdapter
。
我的代码如下:
TagsLandingFragment 此片段将显示TabView
这里我从onViewCreated
中的网络服务中获取数据:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
tabsPagerAdapter = new TabsPagerAdapter(getFragmentManager(),
mFragmentsList);
getTaggedListings(); //In this method I am fetching data from the server. Once I get the data, I call initialiseTabHost to display the tabs
}
private void initialiseTabHost(JSONArray activeTags, String currentTag) {
if(!mFragmentsList.isEmpty())
mFragmentsList.clear();
if (activeTags.length() != 0) {
for (int i = 0; i < activeTags.length(); i++) {
try {
TagListingsModel model = new TagListingsModel();
model.setmFragment(TagDataFragment.newInstance(activeTags
.getString(i)));
model.setTagName(activeTags.getString(i));
if (activeTags.getString(i).equalsIgnoreCase(currentTag)) {
model.setActive(true);
} else {
model.setActive(false);
}
mFragmentsList.add(model);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
mTabHost.setup();
int currentTab = 0;
for (int i = 0; i < mFragmentsList.size(); i++) {
if (mFragmentsList.get(i).isActive()) {
currentTab = i;
}
addTab(getActivity(), this.mTabHost,
this.mTabHost
.newTabSpec(mFragmentsList.get(i).getTagName()));
mTabWidget.getChildAt(i).setBackgroundResource(
R.drawable.selector_tab);
}
mTabHost.setOnTabChangedListener(this);
tabsPagerAdapter.notifyDataSetChanged();
// Fragments and ViewPager Initialization
mViewPager.setAdapter(tabsPagerAdapter);
mViewPager.setOnPageChangeListener(this);
this.mTabHost.setCurrentTab(currentTab);
mTabHost.setVisibility(View.VISIBLE);
}
TagDataFragment 是一个常见的片段,其实例显示在选项卡下。
更新1
在onViewCreated
中,我将getChildFragmentManager
而非getFragmentManager
传递给标签寻呼机适配器,如下所示:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
tabsPagerAdapter = new TabsPagerAdapter(getChildFragmentManager(),
mFragmentsList);
}
现在显示列表,但现在同一项目在listview中多次出现。