切换回标签

时间:2015-10-16 17:21:30

标签: android android-fragments android-tabs

我有三个标签页面浏览器和操作栏栏。当我尝试切换回已经选中的选项卡时,不会显示任何数据,但是logcat表示数据已从服务器中提取并添加到arraylist中。

有关为什么数据现在不会显示的任何建议?我做了大量的研究,仍然无法理解正在发生的事情。

@Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_tabs);

        viewPager = (ViewPager) findViewById(R.id.pager);
        Log.v("Main-onCreate-viewPager", viewPager.toString());
        actionBar = getSupportActionBar();

        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(mAdapter);

        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
            Log.v("Main", "tab added");
        }


        /**
         * on swiping the viewpager make respective tab selected
         **/
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                Log.v("onPageScrolled-position", Integer.toString(position));
                Log.v("onPageScrolled-position", Float.toString(positionOffset));
                Log.v("onPageScrolled-position", Integer.toString(positionOffsetPixels));
            }

            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                Log.v("onPageSelected", "onPageSelected");
                actionBar.setSelectedNavigationItem(position);
                Log.v("onPageSelected-position", Integer.toString(position));
        }


            public void onPageScrollStateChanged(int state) {
                Log.v("StateChanged", "OnPageScrollStateChanged");
                Log.v("statechanged-state", Integer.toString(state));

            }
        });
    }
   public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            Log.v("Main", "Tab REselected");
            Log.v("onTabReselected", tab.toString());
            Log.v("onTabReselected", ft.toString());

            if(tab.getPosition() == 0){
                Log.v("onTabReselected", "ImagesFragment");
                Fragment frag;
                FragmentManager fm1 = Main.this.getSupportFragmentManager();
                FragmentTransaction ft1 = fm1.beginTransaction();
                frag = new ImagesFragment();
                //frag = new FeaturesFragment();
                ft1.replace(R.id.pager, frag);
                ft1.commit();
                frag.setUserVisibleHint(true);
            }

            if (tab.getPosition() == 1) {
                Log.v("onTabReselected", "FeaturesFragment");
                Fragment frag;
                FragmentManager fm1 = Main.this.getSupportFragmentManager();
                FragmentTransaction ft1 = fm1.beginTransaction();
                frag = new FeaturesFragment();
                ft1.replace(R.id.pager, frag);
                ft1.commit();
                frag.setUserVisibleHint(true);

            }

            if (tab.getPosition() == 2) {
                Log.v("onTabReselected", "OptionsFragment");
                Fragment frag;
                FragmentManager fm1 = Main.this.getSupportFragmentManager();
                FragmentTransaction ft1 = fm1.beginTransaction();
                frag = new OptionsFragment();
                ft1.replace(R.id.pager, frag);
                ft1.commit();
                frag.setUserVisibleHint(true);

            }
        }

        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            // on tab selected
            // show respected fragment view
            Log.v("onTabSelected", tab.toString());
            Log.v("onTabSelected", ft.toString());
            Log.v("tab position1", Integer.toString(tab.getPosition()));
            viewPager.setOffscreenPageLimit(0);
            //viewPager.setCurrentItem(tab.getPosition()); //null pointer exception here
            tab.select(); //no null pointer exception, but no show data when swiping tabs
            Log.v("onTabSelected", tab.toString());

            Log.v("tab position", Integer.toString(tab.getPosition()));

             if (tab.getPosition() == 0) {

                Fragment frag;
                FragmentManager fm1 = Main.this.getSupportFragmentManager();
                FragmentTransaction ft1 = fm1.beginTransaction();
                 frag = new ImagesFragment();
                ft1.replace(R.id.pager, frag);
                ft1.commit();
                frag.setUserVisibleHint(true);
            }

                if (tab.getPosition() == 1) {

                    Fragment frag;
                    FragmentManager fm1 = Main.this.getSupportFragmentManager();
                    FragmentTransaction ft1 = fm1.beginTransaction();
                    frag = new FeaturesFragment();
                    ft1.replace(R.id.pager, frag);
                    ft1.commit();
                    frag.setUserVisibleHint(true);

                }

                if (tab.getPosition() == 2) {
                    Fragment frag;
                    FragmentManager fm1 = Main.this.getSupportFragmentManager();
                    FragmentTransaction ft1 = fm1.beginTransaction();
                    frag = new OptionsFragment();
                    ft1.replace(R.id.pager, frag);
                    ft1.commit();
                    frag.setUserVisibleHint(true);

                }
            }


        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            Log.v("Main", "Tab UNselected");
            Log.v("onTabUnselected", tab.toString());
            Log.v("onTabUnselected", ft.toString());
     }




public class TabsPagerAdapter extends FragmentStatePagerAdapter {

    public TabsPagerAdapter(FragmentManager fm) {

        super(fm);
    }

    @Override
    public Fragment getItem(int index) {
        Log.v("index", Integer.toString(index));
        switch (index) {
            case 0:
                Log.v("TabsPagerAdapter", "case 0: ImagesFragment");
                return new ImagesFragment();
            case 1:
                Log.v("TabsPagerAdapter", "case 1: FeaturesFragment");
                return new FeaturesFragment();
            case 2:
                Log.v("TabsPagerAdapter", "case 2: OptionsFragment");
                return new OptionsFragment();
        }

        return null;
    }



    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 3;
    }
}

2 个答案:

答案 0 :(得分:0)

使用FragmentStatePagerAdapter代替TabsPagerAdapter。

答案 1 :(得分:0)

这可能对你有帮助我也有这个问题我有4个标签并切换它们重新创建视图,设置适配器后使用此代码,

viewPager.setAdapter(mAdapter);
viewPager.setOffscreenPageLimit(5); //this one.!

你可以拥有任何数量的限制,但是由于内存自定义,最好使用较少的数字,在oncreate()方法中使用它(如果是Activity)。