Android FragmentStatepageAdapter在调用notifyDataSetChanged时更新当前上一个和下一个片段

Android FragmentStatepageAdapter在调用notifyDataSetChanged时更新当前上一个和下一个片段,android,Android,我正在使用ViewPager和FragmentStatePagerAdapter。 我的应用程序中有以下结构: 在索引0处,片段A 在索引1至7处,片段B: 每个片段B有4个按钮: 按钮C(加载片段C) D(装载碎片D) E(装载碎片E) F(装载碎片F) 当ViewPager get set时,默认情况下加载片段C。 我正在努力实现以下目标: -单击按钮D应将当前片段替换为与按钮关联的片段。这已经完成了 问题是,当按下按钮时,当前片段被替换,上一个片段和下一个片段也被替换。我怎样才能避免这

我正在使用ViewPager和FragmentStatePagerAdapter。 我的应用程序中有以下结构:

  • 在索引0处,片段A
  • 在索引1至7处,片段B:

  • 每个片段B有4个按钮:

  • 按钮C(加载片段C)
  • D(装载碎片D)
  • E(装载碎片E)
  • F(装载碎片F)
当ViewPager get set时,默认情况下加载片段C。 我正在努力实现以下目标: -单击按钮D应将当前片段替换为与按钮关联的片段。这已经完成了 问题是,当按下按钮时,当前片段被替换,上一个片段和下一个片段也被替换。我怎样才能避免这种情况发生

这是我的碎片

 public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

    private final FragmentManager mFragmentManager;
    private Fragment mFragmentAtPos0;
    public FirstPageListener listener = new FirstPageListener();
    private final class FirstPageListener implements
            ChannelPageFragmentListener {
        public void onSwitchToNextFragment() {
            mFragmentManager.beginTransaction().remove(mFragmentAtPos0)
                    .commit();
            if (mFragmentAtPos0 instanceof LatestPostFragment) {
                mFragmentAtPos0 = new LiveLoungeFragment(listener);
            } else { // Instance of NextFragment
                mFragmentAtPos0 = new LatestPostFragment(listener);
            }
            notifyDataSetChanged();
        }

        public void searchFields() {
            if (mFragmentAtPos0 instanceof LatestPostFragment) {
                ((LatestPostFragment) mFragmentAtPos0).reloadData("", false);
            }
            notifyDataSetChanged();
        }
    }
    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
        mFragmentManager = fm;
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
        String tag = null;
        if(position == 0)
        {
            Log.i("Latest Posts","getItem pos : 0");
            tag = DASHBOARD_FRAGMENT;
            fragment = new DashboardFragment();
        }
        else
        {
            Log.i("Latest Posts","getItem pos : " + position);

            if(label.equalsIgnoreCase("latest"))
            {
                fragment = new LatestPostFragment(listener);
                mFragmentAtPos0 = fragment;
                Log.i("Latest Posts","getItem latest");
            }
        else if(label.equalsIgnoreCase("events"))
            {
                fragment = new LiveLoungeFragment(listener);
                mFragmentAtPos0 = fragment;
                Log.i("Latest Posts","getItem events");
                label = "latest";
            }
               fragment = mFragmentAtPos0;
            showDrawerIcon();
        }
        return fragment;
    }

    @Override
    public int getItemPosition(Object object)
    {
        Log.i("Latest Posts","getItemPosition : " + object.toString());
        if (object instanceof LatestPostFragment) {
            Log.i("Latest Posts","getItemPosition latestpost");

            return POSITION_NONE;
        }
        if (object instanceof LiveLoungeFragment) {
            Log.i("Latest Posts","getItemPosition livelounge");

            return POSITION_NONE;
        }
        return POSITION_UNCHANGED;
    }

    @Override
    public int getCount() {
        return channels.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Log.i(TAG,"title : " + position);

        return channels.get(position).getSport().name();
    }
}`
这是按钮的触发器:

((Button) findViewById(R.id.latest)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                label = "latest";
                sub_pressed = true;
                sub_position = "current";
                currentPosition = mViewPager.getCurrentItem();
                getCategoryFromName((String) mSectionsPagerAdapter.getPageTitle(currentPosition).toString());
                LatestPostFragment.firstPageListener.onSwitchToNextFragment();
            }
        });((Button) findViewById(R.id.events)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                label = "events";
                sub_pressed = true;
                sub_position = "current";
                currentPosition = mViewPager.getCurrentItem();
                getCategoryFromName((String) mSectionsPagerAdapter.getPageTitle(currentPosition).toString());
                LatestPostFragment.firstPageListener.onSwitchToNextFragment();
            }
        });
基本上,当按下按钮时,将调用onSwitchToNextFragment的侦听器,并调用notifyDataSetChanged

这是来自getItemPosition的日志

04-28 10:24:46.940 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItemPosition:LatestPostFragment{395c1afe#0 id=0x7f0a008a} 04-28 10:24:46.940 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItemPosition latestpost 04-28 10:24:46.940 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItemPosition:LatestPostFragment{1ae5125f#2 id=0x7f0a008a} 04-28 10:24:46.940 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItemPosition latestpost 04-28 10:24:46.940 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItemPosition:LatestPostFragment{139bf4ac#1 id=0x7f0a008a} 04-28 10:24:46.940 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItemPosition latestpost 04-28 10:24:46.946 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ 采购项目位置:3 04-28 10:24:46.946 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItem最新版本 04-28 10:24:46.946 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ 采购项目位置:2 04-28 10:24:46.946 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItem最新版本 04-28 10:24:46.946 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ 获取项目位置:4 04-28 10:24:46.946 5127-5127/com.breatesport.breatesport应用程序I/最新帖子﹕ getItem最新版本

我的猜测是getItemPosition无法理解哪一个是currentFragment,我可能在实现中做了一些错误的事情。 我希望有人能帮忙