【问题标题】:Back button from activity is removing fragment活动中的后退按钮正在删除片段
【发布时间】:2017-11-07 09:33:37
【问题描述】:

我正在尝试保留Fragment 的状态。我有MotherActivity,其中有FragmentOneFragmentTwoFragmentThree 和内部FragmentTwo 我正在调用另一个活动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()

【问题讨论】:

  • MotherActivityonStart() 内容放入onCreate() 可能会解决它。把它放在onCreate()android.app.FragmentManager fragmentManager = getFragmentManager(); android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.frame_layout, FragmentOne.newInstance(bottomNavigation)); fragmentTransaction.commit();
  • 在您的清单母活动 android:alwaysRetainTaskState="true" 中添加以下代码

标签: android android-fragments fragment-backstack


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多