Android 安卓碎片反压
我有4个片段,即B、C、D。 现在,当我将更多的数据从A添加到B时,我将A添加到后堆栈。 然后我从B移动到C,而不添加到后堆栈。 然后我从C移到D,而不添加到后堆栈。 现在回按我被重定向到A 我再次重复,直到D,现在当我按下后,它显示片段A,再次将我重定向到片段D,再次按下后,它退出应用程序 我希望它能像从D回来的背压一样,它应该总是能让我到达A 有人能帮忙吗 这是密码 我在logcat中得到这个 02-06 13:31:19.395 26930-26930/com.example.user.fragmentbackbackbackbackback示例I/dalvikvm﹕ 找不到从方法引用的方法android.view.ViewGroup.isTransitionGroup android.support.v4.app.FragmentTransitionCompat21.CaptureTransitionViews 02-06 13:31:19.395 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ VFY:无法解析虚拟方法11340:Landroid/view/ViewGroup;。isTransitionGroup Z 02-06 13:31:19.395 26930-26930/com.example.user.fragmentbackbackbackbackback示例I/dalvikvm﹕ 找不到从方法android.support.v4.app.FragmentTransitionCompat21.findNamedViews引用的方法android.view.view.getTransitionName 02-06 13:31:19.395 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ VFY:无法解析虚拟方法11182:Landroid/view/view;。getTransitionName Ljava/lang/String 02-06 13:31:19.405 26930-26930/com.example.user.fragmentbackbackbackbackback示例I/dalvikvm﹕ 找不到从方法android.support.v4.app.FragmentTransitionCompat21.getTransitionName引用的方法android.view.view.getTransitionName 02-06 13:31:19.405 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ VFY:无法解析虚拟方法11182:Landroid/view/view;。getTransitionName Ljava/lang/String 02-06 13:31:19.415 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ 无法解析Landroid/support/v4/app/FragmentTransitionCompat21$1的超类;1303 02-06 13:31:19.415 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ “Landroid/support/v4/app/FragmentTransitionCompat21$1;”类链接失败 02-06 13:31:19.415 26930-26930/com.example.user.fragmentbackbackbackbackback示例E/dalvikvm﹕ 找不到从方法引用的类“android.support.v4.app.FragmentTransitionCompat21$1” android.support.v4.app.FragmentTransitionCompat21.setEpicenter 02-06 13:31:19.425 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ VFY:无法解析新实例294 Landroid/support/v4/app/FragmentTransitionCompat21$1;在Landroid/support/v4/app/FragmentTransitionCompat21中 02-06 13:31:19.425 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ 无法解析Landroid/support/v4/app/FragmentTransitionCompat21$3的超类;1303 02-06 13:31:19.425 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ “Landroid/support/v4/app/FragmentTransitionCompat21$3;”类链接失败 02-06 13:31:19.435 26930-26930/com.example.user.fragmentbackbackbackbackback示例E/dalvikvm﹕ 找不到类“android.support.v4.app.FragmentTransitionCompat21$3”,引用自方法android.support.v4.app.FragmentTransitionCompat21.setSharedElementEpicenter 02-06 13:31:19.435 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ VFY:无法解析新实例296 Landroid/support/v4/app/FragmentTransitionCompat21$3;在Landroid/support/v4/app/FragmentTransitionCompat21中 02-06 13:31:19.435 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ 无法解析Landroid/support/v4/app/FragmentTransitionCompat21$1的超类;1303 02-06 13:31:19.435 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ “Landroid/support/v4/app/FragmentTransitionCompat21$1;”类链接失败 02-06 13:31:19.445 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ 无法解析Landroid/support/v4/app/FragmentTransitionCompat21$3的超类;1303 02-06 13:31:19.445 26930-26930/com.example.user.fragmentbackbackbackbackbackexample W/dalvikvm﹕ “Landroid/support/v4/app/FragmentTransitionCompat21$3;”类链接执行此操作失败。。 对于片段A,请执行以下操作Android 安卓碎片反压,android,android-fragments,Android,Android Fragments,我有4个片段,即B、C、D。 现在,当我将更多的数据从A添加到B时,我将A添加到后堆栈。 然后我从B移动到C,而不添加到后堆栈。 然后我从C移到D,而不添加到后堆栈。 现在回按我被重定向到A 我再次重复,直到D,现在当我按下后,它显示片段A,再次将我重定向到片段D,再次按下后,它退出应用程序 我希望它能像从D回来的背压一样,它应该总是能让我到达A 有人能帮忙吗 这是密码 我在logcat中得到这个 02-06 13:31:19.395 26930-26930/com.example.user.
getSupportFragmentManager().beginTransaction()
.add(R.id.containerMain, new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A")
.commit();
getSupportFragmentManager().beginTransaction().add(android.R.id.content,new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A").commit();
@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());
}
});
}
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();
}
对于其他片段,请不要使用addToBackStack
现在,当您从其他片段返回时,您将始终返回片段A
更新:
在MainActivity.java中,执行以下操作
getSupportFragmentManager().beginTransaction()
.add(R.id.containerMain, new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A")
.commit();
getSupportFragmentManager().beginTransaction().add(android.R.id.content,new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A").commit();
@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());
}
});
}
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();
}
在您的FragmentA.java中,执行以下操作
getSupportFragmentManager().beginTransaction()
.add(R.id.containerMain, new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A")
.commit();
getSupportFragmentManager().beginTransaction().add(android.R.id.content,new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A").commit();
@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());
}
});
}
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();
}
最后更新:
实现愿望的最简单方法
在MainActivity.java中,执行以下操作
getSupportFragmentManager().beginTransaction()
.add(R.id.containerMain, new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A")
.commit();
getSupportFragmentManager().beginTransaction().add(android.R.id.content,new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A").commit();
@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());
}
});
}
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();
}
在每一个片段中都要这样做
getSupportFragmentManager().beginTransaction()
.add(R.id.containerMain, new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A")
.commit();
getSupportFragmentManager().beginTransaction().add(android.R.id.content,new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A").commit();
@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());
}
});
}
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();
}
希望有帮助。谢谢;D只需将super.onBackPressed移除即可;从你的代码中很难说没有看到一些代码…@KirillVolkov请查看代码,它只是给出了你的
完整的源代码。请在这里粘贴相关的位,我只做了。。。请检查代码,如果您只将片段A添加到backstack,那么您可以只还原到片段A。这毕竟是您想要的!!我希望它能像从D回来的背压一样,它应该总是能让我到达A