Android 用它来完成片段';作为一个整体,中国的东道国活动 当我必须完成一个只有一个片段的活动时,我注意到片段在空白活动(容器活动)结束之前就消失了。
你们是怎么处理这种情况的 SingleFragmentActivity.java: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扩展了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>