3

我有一个奇怪的用户界面问题。简而言之,我在 Fragment 中有一个 ViewPager(我们称之为“A”)。至此,在 ViewPager 中显示 Fragments 是没有问题的。

当我按下后退按钮时出现问题。后退按钮弹出 Fragment A 就好了并返回到前一个 Fragment,但是在此转换过程中,ViewPager 的内容完全空白。

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

代码片段

Initial Fragment 显示项目列表。我们点击一​​个项目......

@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()
            .beginTransaction()
            .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 的新 Fragment 出现了。ViewPager 已初始化...

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

我没有onBackPressed在父 Activity 或任何其他有趣的业务中压倒一切。这很简单。

4

2 回答 2

0

使用 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;   
 }
于 2015-03-12T20:36:15.360 回答
0

您需要覆盖 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();
}
于 2015-03-11T01:29:38.980 回答