我有一个奇怪的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
。这很简单。
答案 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;
}