Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换片段后,ViewPager不刷新_Java_Android - Fatal编程技术网

Java 替换片段后,ViewPager不刷新

Java 替换片段后,ViewPager不刷新,java,android,Java,Android,我有一个片段列表,可以在导航栏中打开: getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment).commit(); 这些片段都来自同一类型->CDMBasicMovieFragment扩展片段 在这个片段中,我有一个viewpager,我用getFragmentManager()调用它。这里我有个问题。第一个片段很好,但替换第一个片段后,viewpager为空。然后我

我有一个片段列表,可以在导航栏中打开:

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment).commit();
这些片段都来自同一类型->
CDMBasicMovieFragment扩展片段

在这个片段中,我有一个viewpager,我用
getFragmentManager()
调用它。这里我有个问题。第一个片段很好,但替换第一个片段后,viewpager为空。然后我将
getFragmentManager()
更改为
getChildFragmentManager()
。现在所有碎片都好了。但只有一次。在替换回第一个片段之后,我遇到了同样的问题。我做错了什么

Edit1:

我的视图层次结构:

  • 活动

    • 电影片段1
      • 寻呼机
        • CDMMovieListFragment
    • 电影片段2
      • 寻呼机
        • CDMMovieListFragment
    • 电影片段3
      • 寻呼机
        • CDMMovieListFragment
Edit2:

我尝试为片段创建唯一的ID,并在替换时使用它们,但我已经遇到了相同的问题:

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment, uniqueFragmentTag).commit();
Edit3:

我找到了一个可能的解决方案: 我尝试了这个链接的所有内容。我已经有同样的问题了。。。有人能帮忙吗

更新:

在密集调试会话之后;)我发现:

加载第一个
CDMMovieListFragment
FragmentPagerAdapter的
InstanceItem
被调用,并检查是否已经存在片段。这不是它内部调用的原因

mCurTransaction.add(container.getId(),fragment,makeFragmentName(container.getId(),itemId))

当我替换包含fragmentpageradapter的
CDMBasicMovieFragment
并尝试加载第二个
CDMBasicMovieFragment
时,它仍然是相同的fragmentmanager


FragmentPagerAdapter的
实例化项
被调用并找到旧的
CDMMovieListFragment
。现在它调用
mCurTransaction.attach(fragment)取而代之。我想问题出在这里。但是我很困惑…

在您的自定义寻呼机适配器中尝试下面的代码片段:

@Override
public int getItemPosition(Object object) {
     return POSITION_NONE;
}
然后在包含ViewPager的活动中:

final MyPagerAdapter adapter = new MyPagerAdapter();
pager.setAdapter(adapter);
pager.setOnPageChangeListener(new OnPageChangeListener() {
     @Override
     public void onPageSelected(int position) {
          ... anything you may need to do to handle pager state ...
          adapter.notifyDataSetChanged(); //this line will force all pages to be loaded fresh when changing between fragments
     }
}

请在自定义寻呼机适配器中尝试以下代码段:

@Override
public int getItemPosition(Object object) {
     return POSITION_NONE;
}
然后在包含ViewPager的活动中:

final MyPagerAdapter adapter = new MyPagerAdapter();
pager.setAdapter(adapter);
pager.setOnPageChangeListener(new OnPageChangeListener() {
     @Override
     public void onPageSelected(int position) {
          ... anything you may need to do to handle pager state ...
          adapter.notifyDataSetChanged(); //this line will force all pages to be loaded fresh when changing between fragments
     }
}
我解决了我的问题

现在我总是这样替换
CDMBasicMovieFragment

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, CDMBasicMovieFragment.newInstance()).commit();
调用FragmentPagerAdapter的构造函数时,我将
getFragmentManager
更改为
getChildFragmentManager

我想我可以一次性创建所有片段,只要单击导航栏(drawner)上的项目就可以替换它们。但是
replace
将删除一次创建的片段,当我想再次替换删除的片段时,它不在那里。这就是为什么我有一个空的viewpager。

我解决了我的问题

现在我总是这样替换
CDMBasicMovieFragment

getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, CDMBasicMovieFragment.newInstance()).commit();
调用FragmentPagerAdapter的构造函数时,我将
getFragmentManager
更改为
getChildFragmentManager


我想我可以一次性创建所有片段,只要单击导航栏(drawner)上的项目就可以替换它们。但是
replace
将删除一次创建的片段,当我想再次替换删除的片段时,它不在那里。这就是为什么我有一个空的viewpager。

这与你的情况有关吗?mViewPager=(ViewPager)findViewById(R.id.pager);//必须设置OffscreenPageLimit,因为默认值为1,我们有3个选项卡。如果加载程序完成时屏幕外没有一个可用,它将崩溃,否则mViewPager.setOffscreenPageLimit(2);我不想更改viewpager中的片段。我想替换包含viewpager的片段。检查我的编辑。我添加了视图层次结构。我明白了。这有点复杂。这和你的情况有关吗?mViewPager=(ViewPager)findViewById(R.id.pager);//必须设置OffscreenPageLimit,因为默认值为1,我们有3个选项卡。如果加载程序完成时屏幕外没有一个可用,它将崩溃,否则mViewPager.setOffscreenPageLimit(2);我不想更改viewpager中的片段。我想替换包含viewpager的片段。检查我的编辑。我添加了视图层次结构。我明白了。这有点复杂,没什么变化。。。同样的问题也必须在特定的碎片上执行此操作以强制重新加载。工作正常,但有点延迟。没有改变。。。同样的问题也必须在特定的碎片上执行此操作以强制重新加载。工作正常,但有点延迟。太好了。我和你有同样的问题,现在已经解决了。谢谢,太好了。我和你有同样的问题,现在已经解决了。谢谢