当前位置: 首页 > 知识库问答 >
问题:

嵌套的ViewPager在onBackPressed()上空白内容

公良鸿禧
2023-03-14

我有一个奇怪的UI问题。简而言之,我在片段中有一个ViewPager(我们称它为“a”)。到目前为止,在ViewPager中显示片段没有问题。

当我按下后退按钮时,问题出现了。后退按钮弹出片段A并返回到上一个片段,但是在这个转换过程中,ViewPager的内容被完全屏蔽。

这很明显,因为我有过渡动画。我不知道为什么会这样。很明显,这与嵌套片段有关,因为这只发生在这个特定的屏幕上,而这个屏幕是唯一有嵌套片段的屏幕。

代码片段

初始片段显示项目列表。我们单击一个项目......

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    FragmentManager fm = getFragmentManager();
    Fragment f = fm.findFragmentByTag("some_tag_name");
    if(f == null) {
        f = SomFragment.newInstance(...);
    }  

    getFragmentManager()
            .beginTransacthtml" target="_blank">ion()
            .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,
                                 R.anim.slide_in_left, R.anim.slide_out_right)
            .replace(R.id.frame, f)
            .addToBackStack(null)
            .commit();
}

现在,一个新片段出现在ViewPager中。ViewPager已初始化。。。

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {    
    mPager = (ViewPager) view.findViewById(R.id.viewpager);
    mPagerAdapter = new SomeAdapter(getChildFragmentManager());
    mPager.setAdapter(mPagerAdapter);    
}

在父活动或任何其他有趣的业务中,我没有覆盖onBackPress。这很简单。

共有2个答案

东方建修
2023-03-14

使用onCreateView()(而不是onViewCreated()):

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
   View rootView = inflater.inflate(R.layout.pager, container, false);                                                   

   mPager = (ViewPager)rootView.findViewById(R.id.viewpager);
   mPagerAdapter = new SomeAdapter(getChildFragmentManager());
   mPager.setAdapter(mPagerAdapter); 
   return rootView;   
 }
卫景明
2023-03-14

您需要重写onResume()方法,并在那里重新初始化UI。

@Override
 public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         initialize();
}

private void initialize(){
      btnOne= (Button) getActivity().findViewById(R.id.btnOne);
      btnTwo = (Button) getActivity().findViewById(R.id.btnTwo);      

      btnOne.setOnClickListener(this);
      btnTwo.setOnClickListener(this);    

      viewPager = (ViewPager) getActivity().findViewById(R.id.viewPager);
      viewPager.setAdapter(new ViewPagerAdapter(getActivity().getSupportFragmentManager()));

}

@Override
public void onResume() {
    super.onResume();
    initialize();
}
 类似资料:
  • 我需要创建一个像谷歌报摊这样的界面,它是一种折叠标题(垂直滚动)上的ViewPenger(水平滚动)。我的要求之一是使用在Google IO 2015上展示的新设计支持库。(http://android-developers.blogspot.ca/2015/05/android-design-support-library.html) 基于克里斯·贝恩斯(https://github.com/c

  • 我正在编写一个使用嵌套ViewPager的应用程序。每个父ViewPager包含7个子ViewPager。 对于第一个父视图,它可以正常工作,但当它到达下一页时,它在子视图页面的位置显示为空白。 如果使用嵌套视图寻呼机是可行的,这里有什么建议吗?如果是的话,我怎么能避免这个案子呢? 父ViewPager布局与子片段相同: 这是我在父ViewPager片段中实现的子ViewPager适配器:

  • 根据谷歌的文档: 现在可以在片段中嵌入片段。这对于各种情况都很有用,在这些情况下,您需要将动态和可重用的UI组件放置到本身是动态和可重用的UI组件中。例如,如果使用ViewPager创建左右滑动并占用大部分屏幕空间的片段,现在可以将片段插入每个片段页面。要嵌套片段,只需对要添加片段的片段调用getChildFragmentManager()。这将返回一个FragmentManager,您可以像通常

  • 我有一个垂直的viewpager在一个水平的viewpager。在horzontal viewpager I的第二个片段中,添加了垂直viewpager。垂直viewpager包含有图像的片段,所以当片段对用户可见时,我必须开始动画图像,因为使用了setUserVisibleHint。但是当移动到水平viewpager的第二个片段时,不会调用垂直viewpager内部片段的setUserVisib

  • 我是一个新的反应,仍然在学习。我试图在react项目中添加嵌套路由,以便div的内容根据路由进行更改。 以下是我的组件:- 当我打开/protected时,我可以看到标题,但当我尝试打开/protected/cafepreview时,我看到一个空页面,而不是带有caf preview html的标题。 我尝试了这个stackoverflow线程中提到的一些选项,在react router dom

  • 编译程序突出显示“companion”,表示“修饰符companion不适用于内部类”,还突出显示InnerClass()调用,表示“表达式无法从嵌套类工厂访问”,使用“inner”关键字使类处于内部。 我如何用Java中的静态工厂方法来实现我在这里试图做的事情?