刷卡或选择标签时重新加载或刷新列表片段?

时间:2015-03-17 13:17:24

标签: android android-fragments android-viewpager android-tabs android-pageradapter

我无法在选择或刷选标签时重新加载/刷新Listfragment( CfFragment(),PfFragment(),IfFragment()),任何人都可以告诉我我在哪里出错了。我的代码在第一次创建时运行良好,但是在刷卡或选中时它没有重新加载/刷新。如果我在第一个listfragment中更改任何内容,它应该影响第二个列表片段,依此类推... 请任何人帮助我。非常感谢。 谢谢。

 public class busy extends FragmentActivity implements
        ActionBar.TabListener {


SessionManager session;

AppSectionsPagerAdapter mAppSectionsPagerAdapter;
static ServiceURL URL;

static AlertDialogManager alert = new AlertDialogManager();

ViewPager mViewPager;

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    setContentView(R.layout.busy);      

    session = new SessionManager(getApplicationContext());              

    mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());

    final ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mAppSectionsPagerAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {

                    actionBar.setSelectedNavigationItem(position);
                }
            });

    for (int i = 0; i < mAppSectionsPagerAdapter.getCount(); i++) {
        actionBar.addTab(actionBar.newTab().setText(mAppSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
    }
}



@Override
public void onTabUnselected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
}

@Override
public void onTabSelected(ActionBar.Tab tab,FragmentTransaction fragmentTransaction) {

    mViewPager.setCurrentItem(tab.getPosition());
    //mViewPager.setAdapter(mAppSectionsPagerAdapter);

}

@Override
public void onTabReselected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {

    public AppSectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i) {
        case 0:
            return new CfFragment();
        case 1:
            return new PfFragment();
        case 2:
            return new IfFragment();

        }
        return null;
    }

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

    public CharSequence getPageTitle(int position) {

        switch (position) {
        case 0:
            return "Confy";

        case 1:
            return "Peny";

        case 2:
            return "Incy";

        default:

            break;
        }
        return null;
    }
}

}

1 个答案:

答案 0 :(得分:3)

将您的AppSectionsPagerAdapter课程视为

public static class AppSectionsPagerAdapter extends FragmentStatePagerAdapter

而不是

public static class AppSectionsPagerAdapter extends FragmentPagerAdapter

基本上,FragmentPagerAdapter会将创建的Fragment保留在内存中,而FragmentStatePagerAdapter会在移入和移出视图时重新销毁并创建它们。

还有两件事:

1。确保您在任何setRetainInstance(true)中呼叫Fragment,否则他们将无法重新创建

2。添加

viewPager.setOffscreenPageLimit(0);

代码。

修改

而不是

Activity -> ViewPager -> Fragments

将结构创建为

Activity -> Fragment -> ViewPager -> Nested Fragments

这将确保在标签更改时刷新每个Fragment。有关实施,请参阅this帖子。