首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android片段背投

android片段背投
EN

Stack Overflow用户
提问于 2015-02-05 15:02:19
回答 2查看 1.4K关注 0票数 1

我有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;‘类链路失败

EN

回答 2

Stack Overflow用户

发布于 2015-02-05 16:31:52

这样做..。对于片段A,执行此操作..

代码语言:javascript
复制
getSupportFragmentManager().beginTransaction()
                .add(R.id.containerMain, new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A")
                .commit();

对于其他片段,请不要使用addToBackStack(..)

现在,当您从其他片段按back时,您将始终返回到片段A。

更新:

在您的MainActivity.java中执行此操作..

代码语言:javascript
复制
getSupportFragmentManager().beginTransaction().add(android.R.id.content,new FragmentA()).addToBackStack("BACKSTACK_FRAGMENT_A").commit();

在你的FragmentA.java中这样做..

代码语言:javascript
复制
@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中执行此操作..

代码语言:javascript
复制
public String TAG = "";

@Override
public void onBackPressed() {
    if (TAG.equals("FragmentD")) {
        getSupportFragmentManager().beginTransaction().add(R.id.container, new FragmentA()).commit();
    }else{
        super.onBackPressed();
    }
}

中,每个片段都是这样做的。

代码语言:javascript
复制
MainActivity mainActivity;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mainActivity = (MainActivity) activity;
    mainActivity.TAG = getClass().getSimpleName();
}

希望是helps.Thanks!!;D

票数 0
EN

Stack Overflow用户

发布于 2015-03-30 05:17:52

只需从您的代码中删除super.onBackPressed();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28337999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档