【问题标题】:ViewPager blank on back from another fragmentViewPager 从另一个片段背面空白
【发布时间】:2014-07-30 17:51:57
【问题描述】:

实际上,我通过主视图容器中的片段在单个活动中使用整个应用程序。 当我点击一个由LoginFragment 替换的标题按钮片段时,一个片段包含一个viewPager,在返回时我们维护backstack,因此包含viewPager 的片段将位于顶部,但我们在viewPager 中获得了当前项目的空白视图。

【问题讨论】:

  • 如果您旋转屏幕是否显示片段,请勾选此项?
  • 不,它仍然是空白的......
  • 也许这会对你有所帮助。检查答案:stackoverflow.com/questions/24610674/pager-inside-a-fragment
  • 我自己在调试时得到了答案。问题是我在片段中使用了 fragmentPager,所以对于适配器初始化,我们必须传递 getChildFragmentManager() 而不是 getFragmentManager()

标签: android android-fragments android-viewpager


【解决方案1】:

这是我的解决方案,我已经搜索了很多答案,所以如果你有更好的答案,请与我分享..

我将 ViewPager 切换到了 Activity

活动 XML

<RelativeLayout ....
   xmlns.

<FrameLayout 
    android:id="@+id/container"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
 />

 <android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 </...viewPager>

活动类

public MainActivity extends Activity .... {

   private boolean mShowPager;
   private FrameLayout mContainer;
   private ViewPager mPager;

   //Inflate them


  public void showViewPager() {
        mPager.setVisibility(View.Visible);
        mContainer.setVisibilty(View.Gone);
  }

  public void showContainer() {
        mContainer.setVisibility(View.Visible);
        mPager.setVisibilty(View.Gone);
  }


  public void showViewPager(boolean show) {
       mShowPager = show;
  }


  @override
  public void onBackPressed() {

        if(mShowPager) {
             showViewPager();
        }
        super.onBackPressed();

片段示例

  public void onAttach(Activity activity) {

         ((MainActivity)activity).showViewPager(true);
         ((MainActivity)activity).showContainer();

//True 表示当按回时显示 ViewPager //Back 表示仍然显示 Container 但按下 Back 信息:您决定要显示什么 ViewPager 或包含 Fragments 的容器,如果需要,您可以使用 BackStack。

希望它对我有所帮助。

【讨论】:

  • 感谢好友的评论,但我无法将其更改为会破坏整个过程的活动...
  • 我自己在调试时得到了答案。问题是我在片段中使用了 fragmentPager,所以对于适配器初始化,我们必须通过 getChildFragmentManager() 而不是 getFragmentManager() –
  • 感谢 getChildFragmentManager()!正是我需要的
  • 添加 getChildFragmentManager() 也解决了我的问题 :) 谢谢
  • getChildFragmentManager() 解决了我的问题。谢谢。
【解决方案2】:

我自己在调试时得到了答案。问题是我在片段中使用了 fragmentPager,所以对于适配器初始化,我们必须通过 getChildFragmentManager() 而不是 getFragmentManager()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多