【问题标题】:Reload or refresh list fragment when swiped or when tab is selected?滑动或选择选项卡时重新加载或刷新列表片段?
【发布时间】:2015-03-17 13:17:23
【问题描述】:

我无法重新加载/刷新listfragment( cffragment(),pffragment(),如果选择选项卡或刷新的代码中的pffragment(),iffragment())可以告诉我我在哪里出错了。我的代码在第一次创建时运行良好,但在滑动或选择时它不会重新加载/刷新。如果我更改第一个列表片段中的任何内容,它应该会影响第二个列表片段等等.. . 请任何人帮助我。将不胜感激。 谢谢你。

 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;
    }
}

}

【问题讨论】:

  • 你看到我的回答了吗?
  • 所有三个片段仅在创建时重新加载/刷新,我修改了第一个片段中的列表项,它不影响第二个片段。它仍然保持不变。
  • 你在哪里接触到这个?
  • 谢谢你帮了我很多:)

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


【解决方案1】:

将您的AppSectionsPagerAdapter 类派生为

public static class AppSectionsPagerAdapter extends FragmentStatePagerAdapter

而不是

public static class AppSectionsPagerAdapter extends FragmentPagerAdapter

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

还有两件事:

1.确保您没有在您的任何Fragments 中调用setRetainInstance(true),否则它们将不会被重新创建。

2.添加

viewPager.setOffscreenPageLimit(0);

到您的代码。

编辑:

代替

Activity -> ViewPager -> Fragments

创建结构为

Activity -> Fragment -> ViewPager -> Nested Fragments

这将确保每个Fragment 在标签更改时刷新。实现见this帖子。

【讨论】:

  • 我已经按照你说的添加了,但它仍然保持不变......我没有在那个片段的任何地方调用 setRetainInstance(true)......我哪里出错了?跨度>
猜你喜欢
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多