Android 用它来完成片段';作为一个整体,中国的东道国活动 当我必须完成一个只有一个片段的活动时,我注意到片段在空白活动(容器活动)结束之前就消失了。

Android 用它来完成片段';作为一个整体,中国的东道国活动 当我必须完成一个只有一个片段的活动时,我注意到片段在空白活动(容器活动)结束之前就消失了。,android,android-fragments,android-activity,fragment,lifecycle,Android,Android Fragments,Android Activity,Fragment,Lifecycle,你们是怎么处理这种情况的 SingleFragmentActivity.java: 公共类SingleFragmentActivity扩展了BaseSecondaryActivity{ public static final java.lang.String FRAGMENT\u CLASS\u NAME=“FRAGMENT\u CLASS\u NAME”; public static final java.lang.String FRAGMENT\u TITLE=“FRAGMENT\u TIT

你们是怎么处理这种情况的

SingleFragmentActivity.java:
公共类SingleFragmentActivity扩展了BaseSecondaryActivity{
public static final java.lang.String FRAGMENT\u CLASS\u NAME=“FRAGMENT\u CLASS\u NAME”;
public static final java.lang.String FRAGMENT\u TITLE=“FRAGMENT\u TITLE”;
私有字符串标题;
私有ActionBar片段;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Bundle Bundle=getIntent().getExtras();
String fragmentName=bundle.getString(片段类名称);
if(bundle.getInt(片段标题)==0){
title=“”;
}否则{
title=getString(bundle.getInt(FRAGMENT_title));
}
试一试{
FragmentTransaction FragmentTransaction=getSupportFragmentManager().beginTransaction();
Class fragmentClass=(Class)Class.forName(fragmentName);
fragment=fragmentClass.newInstance();
捆绑。移除(碎片标题);
bundle.remove(片段类名称);
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.fragment\u容器,fragment);
fragmentTransaction.addToBackStack(空);
fragmentTransaction.commit();
}catch(classnotfounde异常){
e、 printStackTrace();
}捕获(实例化异常e){
e、 printStackTrace();
}捕获(非法访问例外e){
e、 printStackTrace();
}
}
@凌驾
受保护的int provideContentViewId(){
返回R.layout.activity_和_片段;
}
受保护的字符串getActionBarTitleString(){
返回标题;
}
}
带有_fragment.xml的活动


你所说的“当我必须完成一项活动”是什么意思?您是否显式调用finish()?是的,我的意思是calll finish(),删除片段后活动屏幕变为空白,然后活动首先完成它自己,不需要
fragmentTransaction.addToBackStack(null)第二,如果不检查
savedInstanceState
是否为空,则不应再次创建片段。。。此外,您没有提供有关在何处以及如何调用
finish
savedInstanceState的信息,此处未使用,此处调用finish:Override`public void onBackPressed(){this.finish();super.onBackPressed();}“在BaseSecondary活动中@Selvin@JaceHo你有没有找到解决办法?你说的“当我必须完成一项活动”是什么意思?您是否显式调用finish()?是的,我的意思是calll finish(),删除片段后活动屏幕变为空白,然后活动首先完成它自己,不需要
fragmentTransaction.addToBackStack(null)第二,如果不检查
savedInstanceState
是否为空,则不应再次创建片段。。。此外,您没有提供有关在何处以及如何调用
finish
savedInstanceState的信息,此处未使用,此处调用finish:Override`public void onBackPressed(){this.finish();super.onBackPressed();}`在BaseSecondaryActivity中@Selvin@JaceHo你找到解决办法了吗?
    public class SingleFragmentActivity extends BaseSecondaryActivity{

        public static final java.lang.String FRAGMENT_CLASS_NAME = "fragment_class_name";
        public static final java.lang.String FRAGMENT_TITLE = "fragment_title";
        private String title;
        private ActionBarFragment fragment;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Bundle bundle = getIntent().getExtras();
            String fragmentName = bundle.getString(FRAGMENT_CLASS_NAME);
            if(bundle.getInt(FRAGMENT_TITLE) == 0){
                title = "";
            }else {
                title = getString(bundle.getInt(FRAGMENT_TITLE));
            }
            try {
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                Class<ActionBarFragment> fragmentClass  = (Class<ActionBarFragment>) Class.forName(fragmentName);
                fragment = fragmentClass.newInstance();
                bundle.remove(FRAGMENT_TITLE);
                bundle.remove(FRAGMENT_CLASS_NAME);
                fragment.setArguments(bundle);
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        @Override
        protected int provideContentViewId() {
            return R.layout.activity_with_fragment;
        }

        protected String getActionBarTitleString() {
            return title;
        }
    }
     <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/action_bar" />

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>

    </LinearLayout>