FragmentTabHost,嵌套的片段和ViewPager [英] FragmentTabHost, Nested Fragments and ViewPager

本文介绍了FragmentTabHost,嵌套的片段和ViewPager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个活动,这使得使用 FragmentTabHost ,所以每个标签都有一个里面片段。在第一个选项卡,我有2嵌套片段,一个在屏幕的上半部,另一个在底部一半。在底部的片段使用 ViewPager 通过几个扫描 LinearLayouts 。它所有的工作pretty的好。

I have an activity which makes use of a FragmentTabHost, so each tab has a fragment inside it. In the first tab, I have 2 nested fragments, one on the top half of the screen, the other on the bottom half. The fragment on the bottom uses a ViewPager to scan through several LinearLayouts. It all works pretty well.

直到你移动到另一个选项卡,并返回到第一位。底部嵌套的片段不再出现,但一个在上面一样。

Until you move to another tab, and return to the first. The bottom nested fragment no longer appears, but the one on top does.

下面是一些code证明我的用法:

Here's some code demonstrating my usage:

这是我如何使用我的主要活动:

This is how I'm using my main activity:

public class MainActivity extends SherlockFragmentActivity
{
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_activity_layout_vert);

        mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

        mTabHost.addTab(mTabHost.newTabSpec("TAB1").setIndicator("", getResources().getDrawable(R.drawable.tab1_selector)), Tab1Fragment.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("TAB2").setIndicator("", getResources().getDrawable(R.drawable.tab2_selector)), Tab2Fragment.class, null);
    }
}

以下是我使用的片段tab1的:

Here's how I'm using the fragment for tab1:

public class Tab1Fragment extends SherlockFragment
{
    private NestedFragment1 mNestedFrag1 = null;
    private NestedFragment2 mNestedFrag2 = null;


    @Override
    public void onCreate(Bundle inSavedInstanceState)
    {
        super.onCreate(inSavedInstanceState);

        mNestedFrag1 = new NestedFragment1();
        mNestedFrag2 = new NestedFragment2();

        FragmentManager fragManager = getChildFragmentManager();
        FragmentTransaction fragTransaction = fragManager.beginTransaction();

        fragTransaction.add(R.id.nested_frag1_container, mNestedFrag1, "Frag1");
        fragTransaction.add(R.id.nested_frag2_container, mNestedFrag2, "Frag2");
        fragTransaction.commit();
    }

    @Override
    public void onDestroy()
    {
        FragmentManager fragManager = getChildFragmentManager();
        FragmentTransaction fragTransaction = fragManager.beginTransaction();

        fragTransaction.remove(mNestedFrag1);
        fragTransaction.remove(mNestedFrag2);
        fragTransaction.commit();
    }
}

这里是我如何使用第二个嵌套的片段(一说消失):

And here is how I'm using the 2nd nested fragment (the one that disappears):

public class NestedFragment2 extends SherlockFragment
{
    private MyPageAdapter mPageAdapter;
    private ViewPager mViewPager;

    @Override
    public void onCreate(Bundle inSavedInstanceState)
    {
        super.onCreate(inSavedInstanceState);

        mPageAdapter = new MyPageAdapter();
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {   
        View toReturn = inflater.inflate(R.layout.nested_fragment1_layout_top, container, false);

        mViewPager = (ViewPager)toReturn.findViewById(R.id.viewpager);
        mViewPager.setAdapter(mPageAdapter);
        mViewPager.setOffscreenPageLimit(5);

        return toReturn;
    }

    private class MyPageAdapter extends PagerAdapter
    {
        @Override
        public Object instantiateItem(ViewGroup container, int position)
        {           
            View page = getActivity().getLayoutInflater().inflate(R.layout.view_pager_controls_layout, container, false);

            container.addView(page);

            return page;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object)
        {
            container.removeView((View)object);
        }

        @Override
        public int getCount()
        {
            return 5;
        }

        @Override
        public float getPageWidth(int position)
        {
            return 1;
        }

        @Override
        public boolean isViewFromObject(View view, Object object)
        {
            return(view == object);
        }
    }
}

思考?

推荐答案

我想它了。上述code是没问题的。这个问题不得不做我处理PagerAdapter通胀的方式。我没有这样做到底我上面显示。实际上,我是用它的方式是preventing的意见通货膨胀的发生。

I figured it out. The above code was not the problem. The problem had to do with the way I was handling the PagerAdapter inflation. I wasn't doing it exactly how I showed above. The way I was actually using it was preventing an inflation of the views from happening.

这篇关于FragmentTabHost,嵌套的片段和ViewPager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆