假设我有一个以编程方式添加片段的活动:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
返回前一个可见片段的最佳方法是什么?
我发现Android中按钮点击的触发后退按钮功能,但我认为模拟后退键事件不是正确的方法(我也不能让它工作):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
调用finish()只是关闭我不感兴趣的活动。
还有更好的办法吗?
我来到这里寻找或相同的想法,同时我提出了自己的,我相信不是那么糟糕,如果与ViewPager工作。
所以我所做的,是在持有viewPager的父活动中重写onBackPressed方法,并设置它总是回到负1的位置,直到它到达第一个片段,然后关闭活动。
@Override
public void onBackPressed() {
if(viewPager.getCurrentItem()>0){
viewPager.setCurrentItem(viewPager.getCurrentItem()-1);
} else {
super.onBackPressed();
this.close();
}
}
private void close(){
this.finish();
}
这可能会有一个下降,就像它每次只回到左边的一个方向,所以它可能不会工作得很好,如果有制表符,你切换位置与片段跳过,(从0到2,然后按回会把你放在1,而不是0)
对于我的情况,2个片段在viewPager没有标签,它的工作很好。
要使该片段再次出现,只需将该片段添加到backstack,你想要回来按下,例如:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fragment = new LoginFragment();
//replacing the fragment
if (fragment != null) {
FragmentTransaction ft = ((FragmentActivity)getContext()).getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.addToBackStack("SignupFragment");
ft.commit();
}
}
});
在上面的情况下,当按钮按钮被按下时,我打开LoginFragment,现在用户在SignupFragment中。因此,如果调用addToBackStack(TAG),其中TAG = "SignupFragment",那么当在LoginFragment中按下返回按钮时,我们将返回到SignupFragment。
编码快乐!
我来到这里寻找或相同的想法,同时我提出了自己的,我相信不是那么糟糕,如果与ViewPager工作。
所以我所做的,是在持有viewPager的父活动中重写onBackPressed方法,并设置它总是回到负1的位置,直到它到达第一个片段,然后关闭活动。
@Override
public void onBackPressed() {
if(viewPager.getCurrentItem()>0){
viewPager.setCurrentItem(viewPager.getCurrentItem()-1);
} else {
super.onBackPressed();
this.close();
}
}
private void close(){
this.finish();
}
这可能会有一个下降,就像它每次只回到左边的一个方向,所以它可能不会工作得很好,如果有制表符,你切换位置与片段跳过,(从0到2,然后按回会把你放在1,而不是0)
对于我的情况,2个片段在viewPager没有标签,它的工作很好。