切换到片段选项卡主机中的选项卡时查看寻呼机丢失其内容

Posted

技术标签:

【中文标题】切换到片段选项卡主机中的选项卡时查看寻呼机丢失其内容【英文标题】:View pager lost its content while switch to tabs in fragment tab host 【发布时间】:2015-02-27 08:31:42 【问题描述】:

我正面临一个非常奇怪的问题,我在网上发现了类似的问题,但没有一个解决方案可以帮助我摆脱这个问题。

问题 ::

我有一个片段,它有 3 个标签,(使用片段标签主机创建的标签)。现在每个标签都有不同的片段。

从第一个选项卡开始,我设置了一个片段,我使用视图寻呼机和圆形页面指示器来显示带有点(圆形)的图像。

现在,当我将图像从第 1 次滑动到第 2 次然后第 3 次等等时,它可以正常工作。 但是在到达图像 2 后,当我点击 tab2 并再次回到 tab1 时,我的图像丢失了。

您的指导或任何帮助/链接将不胜感激.. 非常感谢。

为了您的理解,我在下面发布代码::

FragmentwithTabHost ::

public class FragmentwithTabHost extends Fragment

    private View rootView;
     private FragmentTabHost mTabHost;
     private Context mContext;
    public FragmentwithTabHost() 
    

    public FragmentwithTabHost(Context ctx) 
        mContext=getActivity();
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
        rootView = inflater.inflate(R.layout.mycardswithtabs, container,
                false);

        mTabHost = (FragmentTabHost) rootView.findViewById(android.R.id.tabhost);

        mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);
        mTabHost.setBackground(getActivity().getResources().getDrawable(R.drawable.normal));
        mTabHost.addTab(
                mTabHost.newTabSpec("tab1").setIndicator("tab1", null),
                Fragment1.class, null);
        mTabHost.addTab(
                mTabHost.newTabSpec("tab2").setIndicator("tab2", null),
                Fragment2.class, null);
        mTabHost.addTab(
                mTabHost.newTabSpec("tab3").setIndicator("tab3", null),
                Fragment3.class, null);
        return rootView;
    

片段1 ::

public class Fragment1 extends Fragment

    //  private Context mContext;
    private View rootView;

    SlidesFragmentAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;
    LinearLayout llSponseredImage,llSponserdByText;
    ImageView imgsponser1,imgsponser2,imgsponser3,imgsponser4;
    public Fragment1() 
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
        rootView = inflater.inflate(R.layout.my_card, container,false);

        mAdapter = new SlidesFragmentAdapter(getActivity()
                .getSupportFragmentManager());

        llSponseredImage=(LinearLayout)rootView.findViewById(R.id.mycardbottomViewSponseredImage);
        llSponserdByText=(LinearLayout)rootView.findViewById(R.id.mycardbottomsponsredby);

        imgsponser1=(ImageView)rootView.findViewById(R.id.imgsponser1);
        imgsponser2=(ImageView)rootView.findViewById(R.id.imgsponser2);
        imgsponser3=(ImageView)rootView.findViewById(R.id.imgsponser3);
        imgsponser4=(ImageView)rootView.findViewById(R.id.imgsponser4);

        mPager = (ViewPager) rootView.findViewById(R.id.pager);
        mPager.setOffscreenPageLimit(4);
        mPager.setClipToPadding(false);
        mPager.setPageMargin(12);
        mPager.setAdapter(mAdapter);

        mIndicator = (CirclePageIndicator) rootView.findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);
        ((CirclePageIndicator) mIndicator).setSnap(true);

        mPager.setOnClickListener(new OnClickListener() 
            @Override
            public void onClick(View v) 
                System.out.println("3242353652523");
                MyCardsWithOffersFragment myCardsWithOffersFragment=new MyCardsWithOffersFragment();
            
        );
        mIndicator
        .setOnPageChangeListener(new ViewPager.OnPageChangeListener() 
            @Override
            public void onPageSelected(int position) 
                /*Toast.makeText(getActivity(),
                        "Changed to page " + position,
                        Toast.LENGTH_SHORT).show();*/
                if(position==0 || position==2)
                    llSponseredImage.setVisibility(View.GONE);
                    llSponserdByText.setVisibility(View.GONE);
                else if(position==1)
                    llSponseredImage.setVisibility(View.VISIBLE);
                    llSponserdByText.setVisibility(View.VISIBLE);

                    imgsponser1.setImageResource(R.drawable.sponser1);
                    imgsponser2.setImageResource(R.drawable.sponser2);
                    imgsponser3.setImageResource(R.drawable.sponser3);
                    imgsponser4.setImageResource(R.drawable.sponser4);
                else if(position==3)
                    llSponseredImage.setVisibility(View.VISIBLE);
                    llSponserdByText.setVisibility(View.VISIBLE);

                    imgsponser1.setImageResource(R.drawable.sponser5);
                    imgsponser2.setImageResource(R.drawable.sponser6);
                    imgsponser3.setImageResource(R.drawable.sponser7);
                    imgsponser4.setImageResource(R.drawable.sponser8);
                
            

            @Override
            public void onPageScrolled(int position,
                    float positionOffset, int positionOffsetPixels) 
            

            @Override
            public void onPageScrollStateChanged(int state) 
            
        );

        return rootView;
    

    public class SlidesFragmentAdapter extends FragmentStatePagerAdapter implements IconPagerAdapter 

        private int[] Images = new int[]  R.drawable.first_image, R.drawable.second_image,
                R.drawable.third_image, R.drawable.four_image

        ;

        private int[] ICONS = new int[]  R.drawable.first_image, R.drawable.second_image,
                R.drawable.third_image, R.drawable.four_image ;

        private int mCount = Images.length;

        public SlidesFragmentAdapter(android.support.v4.app.FragmentManager fragmentManager) 
            super(fragmentManager);
        

        @Override
        public Fragment getItem(int position) 
            return new DemoFragment(Images[position]);
        

        @Override
        public int getCount() 
            return mCount;
        

        @Override
        public int getIconResId(int index) 
            return ICONS[index % ICONS.length];
        
        public float GetPageWidth (int position) 
            return 0.93f;
          
        public void setCount(int count) 
            if (count > 0 && count <= 10) 
                mCount = count;
                notifyDataSetChanged();
            
        
    

【问题讨论】:

你可以查看这个***.com/questions/19331492/… 【参考方案1】:

我认为这可以使用 show() 或 add() 方法来实现。如果它是一个没有 Tabhost 的 Activity,那么它很容易。这种情况下,在切换选项卡时,我们必须应用相同的逻辑。

Check this solution

我想这会给你一些想法。

【讨论】:

感谢您的回复。但是您发布的解决方案对我不起作用。我已经尝试过,它显示了空白片段。

以上是关于切换到片段选项卡主机中的选项卡时查看寻呼机丢失其内容的主要内容,如果未能解决你的问题,请参考以下文章

IllegalArgumentException:快速切换 ActionBar 选项卡时没有找到片段 id 的视图

以编程方式使用选项卡更改片段的选项卡索引

在android中动态创建选项卡并使用传入的参数加载片段

使用 SwiftUI 的 TabbedView 切换到其他选项卡时查看内容不显示

Fragment中的ViewPager,只有选项卡才能在第一个视图上加载选项卡

如何从使用视图寻呼机创建的选项卡片段转移到另一个片段