我有4个片段,分别是A、B、C、D。现在,当我从A到B时,我将A添加到后台堆栈中。然后我从B移到C而不添加到后台堆栈。然后我从C移到D而不添加到后台堆栈。现在按下后,我被重定向到A。
我再一次重复直到D,现在当我按回键时,它显示片段A,并再次将我重定向到片段D,然后再次按回键,它退出应用程序。
我想让它像从D开始的背压,它应该总是能让我到A
有人能帮上忙吗?
以下是代码https://drive.google.com/folderview?id=0Bwt5u0ivqfvPSmxNN0V4YkNKa1U&usp=sharing
我在logcat中得到了这个
02-06 13:31:19.395 26930-26930/com.example.user.fragmentbackstackexample I/dalvikvm:找不到从方法android.support.v4.app.FragmentTransitionCompat21.captureTransitioningViews引用的方法android.view.ViewGroup.isTransitionGroup
02-06 13:31:19.395 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm: VFY: unable to resolve virtual method 11340: Landroid/view/view virtual;.ISTRANSENTION virtual ()Z
02-06 13:31:19.395 26930-26930/com.example.user.fragmentbackstackexample I/dalvikvm:找不到从方法android.support.v4.app.FragmentTransitionCompat21.findNamedViews引用的方法android.view.View.getTransitionName
02-06 13:31:19.395 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm: VFY: unable to resolve virtual method 11182: Landroid/View/View;.getTransformtionName ()Ljava/lang/String;
02-06 13:31:19.405 26930-26930/com.example.user.fragmentbackstackexample I/dalvikvm:找不到从方法android.support.v4.app.FragmentTransitionCompat21.getTransitionName引用的方法android.view.View.getTransitionName
02-06 13:31:19.405 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm: VFY: unable to resolve virtual method 11182: Landroid/View/View;.getTransformtionName ()Ljava/lang/String;
02-06 13:31:19.415 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm:无法解析Landroid/support/v4/app/FragmentTransitionCompat21$1;的超类(1303)
02-06 13:31:19.415 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm:'Landroid/support/v4/app/FragmentTransitionCompat21$1;‘类链路失败
02-06 13:31:19.415 26930-26930/com.example.user.fragmentbackstackexample E/dalvikvm:找不到从方法android.support.v4.app.FragmentTransitionCompat21.setEpicenter引用的类'android.support.v4.app.FragmentTransitionCompat21$1',
02-06 13:31:19.425 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm: VFY:无法解析Landroid/support/v4/app/FragmentTransitionCompat21;中的新实例294 (Landroid/support/v4/app/FragmentTransitionCompat21$1;)
02-06 13:31:19.425 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm:无法解析Landroid/support/v4/app/FragmentTransitionCompat21$3;的超类(1303)
02-06 13:31:19.425 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm:'Landroid/support/v4/app/FragmentTransitionCompat21$3;‘类链路失败
02-06 13:31:19.435 26930-26930/com.example.user.fragmentbackstackexample E/dalvikvm:找不到从方法android.support.v4.app.FragmentTransitionCompat21.setSharedElementEpicenter引用的类'android.support.v4.app.FragmentTransitionCompat21$3',
02-06 13:31:19.435 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm: VFY:无法解析Landroid/support/v4/app/FragmentTransitionCompat21;中的新实例296 (Landroid/support/v4/app/FragmentTransitionCompat21$3;)
02-06 13:31:19.435 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm:无法解析Landroid/support/v4/app/FragmentTransitionCompat21$1;的超类(1303)
02-06 13:31:19.435 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm:'Landroid/support/v4/app/FragmentTransitionCompat21$1;‘类链路失败
02-06 13:31:19.445 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm:无法解析Landroid/support/v4/app/FragmentTransitionCompat21$3;的超类(1303)
02-06 13:31:19.445 26930-26930/com.example.user.fragmentbackstackexample W/dalvikvm:'Landroid/support/v4/app/FragmentTransitionCompat21$3;‘类链路失败
发布于 2015-02-05 16:31:52
这样做..。对于片段A,执行此操作..
getSupportFragmentManager().beginTransaction()
.add(R.id.containerMain, new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A")
.commit();对于其他片段,请不要使用addToBackStack(..)
现在,当您从其他片段按back时,您将始终返回到片段A。
更新:
在您的MainActivity.java中执行此操作..
getSupportFragmentManager().beginTransaction().add(android.R.id.content,new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A").commit();在你的FragmentA.java中这样做..
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
((Button) mView.findViewById(R.id.buttonA)).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
setFragment(new FragmentB());
}
});
}最终更新:
实现你愿望的最简单的方法..
在您的MainActivity.java中执行此操作..
public String TAG = "";
@Override
public void onBackPressed() {
if (TAG.equals("FragmentD")) {
getSupportFragmentManager().beginTransaction().add(R.id.container, new FragmentA()).commit();
}else{
super.onBackPressed();
}
}在中,每个片段都是这样做的。
MainActivity mainActivity;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mainActivity = (MainActivity) activity;
mainActivity.TAG = getClass().getSimpleName();
}希望是helps.Thanks!!;D
发布于 2015-03-30 05:17:52
只需从您的代码中删除super.onBackPressed();
https://stackoverflow.com/questions/28337999
复制相似问题