Android Tab数据未显示在后退导航中

时间:2015-02-15 06:53:49

标签: android android-fragments android-tabhost android-tabs

我的用例如下:

我必须从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中多次出现。

0 个答案:

没有答案