Android FragmentStatepageAdapter在调用notifyDataSetChanged时更新当前上一个和下一个片段
我正在使用ViewPager和FragmentStatePagerAdapter。 我的应用程序中有以下结构: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应将当前片段替换为与按钮关联的片段。这已经完成了 问题是,当按下按钮时,当前片段被替换,上一个片段和下一个片段也被替换。我怎样才能避免这
- 在索引0处,片段A
- 在索引1至7处,片段B:
- 每个片段B有4个按钮:
- 按钮C(加载片段C)
- D(装载碎片D)
- E(装载碎片E)
- F(装载碎片F)
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,我可能在实现中做了一些错误的事情。
我希望有人能帮忙