activity 中的后退按钮正在删除片段

Back button from activity is removing fragment

我正在尝试保持 Fragment 的状态。我有 MotherActivity,其中我有 FragmentOneFragmentTwoFragmentThree,在 FragmentTwo 里面我正在调用另一个 activity ChildActivity .问题是,当我在 ChildActivity 中按下后退按钮时,它正在刷新 MotherActivity 而不是保持我的 FragmentTwo 的状态,而是显示 FragmentOne 这是第一次出现。

我只想要当我从 ChildActivity 按下 BackButton 时,容器 FragmentTwo 应该在那里:

主要活动:

public class MotherActivity extends FragmentActivity {

    AHBottomNavigation bottomNavigation;
    Fragment selectedFragment = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bottomNavigation = (AHBottomNavigation) findViewById(R.id.navigation);
        bottomNavigation.addItem(item1);
        bottomNavigation.addItem(item2);
        bottomNavigation.addItem(item3);

        bottomNavigation.setOnTabSelectedListener(new AHBottomNavigation.OnTabSelectedListener() {
            @Override
            public boolean onTabSelected(int position, boolean wasSelected) {

                if (position == 0) {
                    selectedFragment = FragmentOne.newInstance(bottomNavigation);
                } else if (position == 1) {
                    selectedFragment = FragmentTwo.newInstance(bottomNavigation);
                } else if (position == 2) {
                    selectedFragment = FragmentThree.newInstance(bottomNavigation);
                } 

                android.app.FragmentManager fragmentManager = getFragmentManager();
                android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.frame_layout,selectedFragment);
                fragmentTransaction.commit();


                return true;

            }

        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        android.app.FragmentManager fragmentManager = getFragmentManager();
        android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.frame_layout, FragmentOne.newInstance(bottomNavigation));
        fragmentTransaction.commit();

    }

    public void setNotification(){
        bottomNavigation.setNotification("1", 1);
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        //No call for super().
    }
    @Override
    public void onBackPressed() {
        Intent intent = new Intent();
        setResult(113, intent);
        finish();
        return;

    }
}

FragmentTwo 从我打电话的地方 childActivity:

public class FragmentTwo extends Fragment {
    public static AHBottomNavigation bottomNavigation1;
    Card_detail_Adapter_Footer searchabledapter;
    public static boolean showAddress = false;
    Fragment selectedFragment;

    public static FragmentTwo newInstance(AHBottomNavigation bottomNavigation) {
        FragmentTwo fragment = new FragmentTwo();
        bottomNavigation1 = bottomNavigation;
        showNotificationCounter(3);

        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view   = inflater.inflate(R.layout.fragment_cart, container, false);
        if(showAddress == true){
            showAddress = false;

      // From here I am calling ChildActivity

            Intent intent = new Intent(getActivity(), ChildActivity.class);
            startActivity(intent);

        }
        return view;
    }

}

ChildActivity 中只需调用 onBackPressed()

问题出在您的 MotherActivity.javaonStart() 方法上,因为当您从 FragmentTwo 打开另一个 activity 时,您的 MotherActivity onStop() 被调用。当您按下来自 MotherActivityChildActivity onStart() 的后退按钮时,将通过提交事务替换 FragmentOne 中的 FragmentTwo。 请看一下https://developer.android.com/guide/components/activities/activity-lifecycle.html

onStart() 方法中的代码放入 onCreate() 方法并检查配置是否已更改:

if (savedInstanceState == null) {
    android.app.FragmentManager fragmentManager = getFragmentManager();
    android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.frame_layout, FragmentOne.newInstance(bottomNavigation));
    fragmentTransaction.commit();
}