Java 安卓片段后过渡

Java 安卓片段后过渡,java,android,android-fragments,Java,Android,Android Fragments,我得到了一些片段,我试图整理它们之间的过渡。我可以从Main->A->B->C。然后,当我处理完C中的内容后,我想回到B->A->Main。这是我想要实现的理想过渡 然而,在我当前的代码中,转换有些奇怪。我从Main->A->B->C,然后在C中,我正在做一些SQL来创建数据库中的数据,一旦完成,我就返回到B。然而,从那个里,当我按下后退按钮时,它返回到C->B->A->Main。在后过渡中有一个不必要的C 在我的Main中,我这样调用A: final SettingActivity setti

我得到了一些片段,我试图整理它们之间的过渡。我可以从Main->A->B->C。然后,当我处理完C中的内容后,我想回到B->A->Main。这是我想要实现的理想过渡

然而,在我当前的代码中,转换有些奇怪。我从Main->A->B->C,然后在C中,我正在做一些SQL来创建数据库中的数据,一旦完成,我就返回到B。然而,从那个里,当我按下后退按钮时,它返回到C->B->A->Main。在后过渡中有一个不必要的C

在我的Main中,我这样调用A

final SettingActivity settingFragment = new SettingActivity();
ft.replace(R.id.frame,settingFragment);
ft.addToBackStack("tag");
ft.commit();
FragmentTransaction it = getFragmentManager().beginTransaction();
it.replace(R.id.frame,categoryFragment);
it.addToBackStack("tag");
it.commit();
FragmentTransaction et = getFragmentManager().beginTransaction();
et.replace(R.id.frame,editFragment);
et.addToBackStack("tag");
et.commit();
// button on click listener
new GetAllCategoriesAsyncTask(
            new GetAllCategoriesAsyncTask.OnRoutineFinished() {
                public void onFinish() {

                    Bundle bundle = new Bundle();
                    FragmentTransaction it = getFragmentManager().beginTransaction();

                    bundle.putSerializable("categorylist", GetAllCategoriesAsyncTask.categoryList);
                    categoryFragment.setArguments(bundle);
                    it.replace(R.id.frame,categoryFragment);
                    it.addToBackStack("tag");
                    it.commit();
                }
            }).execute();
在我的A中,我这样呼叫B

final SettingActivity settingFragment = new SettingActivity();
ft.replace(R.id.frame,settingFragment);
ft.addToBackStack("tag");
ft.commit();
FragmentTransaction it = getFragmentManager().beginTransaction();
it.replace(R.id.frame,categoryFragment);
it.addToBackStack("tag");
it.commit();
FragmentTransaction et = getFragmentManager().beginTransaction();
et.replace(R.id.frame,editFragment);
et.addToBackStack("tag");
et.commit();
// button on click listener
new GetAllCategoriesAsyncTask(
            new GetAllCategoriesAsyncTask.OnRoutineFinished() {
                public void onFinish() {

                    Bundle bundle = new Bundle();
                    FragmentTransaction it = getFragmentManager().beginTransaction();

                    bundle.putSerializable("categorylist", GetAllCategoriesAsyncTask.categoryList);
                    categoryFragment.setArguments(bundle);
                    it.replace(R.id.frame,categoryFragment);
                    it.addToBackStack("tag");
                    it.commit();
                }
            }).execute();
在我的B中,我这样呼叫C

final SettingActivity settingFragment = new SettingActivity();
ft.replace(R.id.frame,settingFragment);
ft.addToBackStack("tag");
ft.commit();
FragmentTransaction it = getFragmentManager().beginTransaction();
it.replace(R.id.frame,categoryFragment);
it.addToBackStack("tag");
it.commit();
FragmentTransaction et = getFragmentManager().beginTransaction();
et.replace(R.id.frame,editFragment);
et.addToBackStack("tag");
et.commit();
// button on click listener
new GetAllCategoriesAsyncTask(
            new GetAllCategoriesAsyncTask.OnRoutineFinished() {
                public void onFinish() {

                    Bundle bundle = new Bundle();
                    FragmentTransaction it = getFragmentManager().beginTransaction();

                    bundle.putSerializable("categorylist", GetAllCategoriesAsyncTask.categoryList);
                    categoryFragment.setArguments(bundle);
                    it.replace(R.id.frame,categoryFragment);
                    it.addToBackStack("tag");
                    it.commit();
                }
            }).execute();
然后在我的C中,当我成功地在数据库中插入一条记录时,我调用B如下:

final SettingActivity settingFragment = new SettingActivity();
ft.replace(R.id.frame,settingFragment);
ft.addToBackStack("tag");
ft.commit();
FragmentTransaction it = getFragmentManager().beginTransaction();
it.replace(R.id.frame,categoryFragment);
it.addToBackStack("tag");
it.commit();
FragmentTransaction et = getFragmentManager().beginTransaction();
et.replace(R.id.frame,editFragment);
et.addToBackStack("tag");
et.commit();
// button on click listener
new GetAllCategoriesAsyncTask(
            new GetAllCategoriesAsyncTask.OnRoutineFinished() {
                public void onFinish() {

                    Bundle bundle = new Bundle();
                    FragmentTransaction it = getFragmentManager().beginTransaction();

                    bundle.putSerializable("categorylist", GetAllCategoriesAsyncTask.categoryList);
                    categoryFragment.setArguments(bundle);
                    it.replace(R.id.frame,categoryFragment);
                    it.addToBackStack("tag");
                    it.commit();
                }
            }).execute();
然后在我的B中,我在onCreate()中获得如下数据:

categoryList=(ArrayList)getArguments().getSerializable(“categoryList”);

单击按钮,从堆栈中弹出当前片段,即C,而不是在堆栈中再次添加B。因此,将按钮onClick代码替换为以下代码行:

getFragmentManager().popBackStack();
当您将数据传输到下一屏幕时,将使用
Bundle
。要将数据传输到上一个屏幕,您需要使用回调


作为参考,请查看下面的附加链接:

为什么您要替换C中的片段B。它已经在堆栈中,所以当您返回时,按B将变得可见,所以我应该使用.add()替换或.replace()?我认为替换类似于当你切换意图时,你需要指定它去哪里。只需按Backpress哦,因为在我创建记录之后,我也在从数据库中提取数据,我需要将其传递回上一个片段,然后在B的恢复中获取数据并显示其错误,但我保持所有代码不变,并在单击按钮或?hi@deniset时添加上一行,然后用上一行代码替换上一行代码。您的意思是用pop()替换这四行代码吗?但当我的按钮点击时,我从数据库中提取数据,我想把它传递回B。就像我从AsyncTask中获取数据并通过包传递回B一样。所以我需要指定它的去向to@DeniseTan对的用上面的一行替换你的四行。要将数据传递到上一个片段,需要使用回调。