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

时间:2013-05-24 14:12:23

标签: android android-fragments android-viewpager

我有一个奇怪的UI问题。简而言之,我在Fragment中有一个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()
            .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();
}

现在,一个新的Fragment出现在ViewPager中。 ViewPager已初始化...

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

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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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;   
 }