方向重新启动我的应用程序
Orientation restarts my app
我是编程新手,我有一个带片段的导航抽屉。当我旋转我的设备时,它 "restarts the app" 或调用 Home 片段。我不确定如何解决这个问题,因为它与 super.onCreate (savedInstance) 有关,但还没有找到如何实现它。我还尝试了清单上的 onConfigurationChanged 方法,但没有成功。我一直在从不同的教程中复制代码以使我的应用程序正常工作,所以我不确定我 posting 中的代码是否应该是我应该 post 的代码。谢谢
public class MainActivity extends FragmentActivity {
private DrawerLayout mDrawerLayout;
ImageView home;
Fragment fragment = null;
TextView appname;
ExpandableListView expListView;
HashMap<String, List<String>> listDataChild;
ExpandableListAdapter listAdapter;
List<String> listDataHeader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String fontPath = "neue.ttf";
setContentView(R.layout.activity_main);
home = (ImageView)findViewById(R.id.home);
home.setOnClickListener(homeOnclickListener);
appname = (TextView)findViewById(R.id.appname);
Typeface tf = Typeface.createFromAsset(this.getAssets(), fontPath);
appname.setTypeface(tf);
setUpDrawer();
}
private void setUpDrawer() {
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setScrimColor(getResources().getColor(android.R.color.transparent));
mDrawerLayout.setDrawerListener(mDrawerListener);
expListView = (ExpandableListView) findViewById(R.id.lvExp);
prepareListData();
listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
expListView.setAdapter(listAdapter);
fragment = new Home();
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit();
mDrawerLayout.closeDrawer(expListView);
expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
switch (groupPosition) {
case 0:
switch (childPosition) {
case 0:
fragment = new 1();
break;
case 1:
fragment = new 2();
break;
case 2:
fragment = new 3();
break;
...
}
break;
case 1:
switch (childPosition) {
case 0:
fragment = new 4();
break;
...
default:
break;
}
break;
...
}
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit();
mDrawerLayout.closeDrawer(expListView);
return false;
}
});
}...
在设备旋转时,activity 重新启动 - 这是明显的行为。如果您不希望重新创建 activity,您应该在 Manifest
文件中为 activity 添加 android:configChanges="orientation"
。
否则,当您的 activity 重新启动时,您可以通过像这样检查 savedInstanceState
来阻止调用 setUpDrawer()
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String fontPath = "neue.ttf";
setContentView(R.layout.activity_main);
home = (ImageView)findViewById(R.id.home);
home.setOnClickListener(homeOnclickListener);
appname = (TextView)findViewById(R.id.appname);
Typeface tf = Typeface.createFromAsset(this.getAssets(), fontPath);
appname.setTypeface(tf);
if(savedInstanceState == null){
setUpDrawer();
}
}
我是编程新手,我有一个带片段的导航抽屉。当我旋转我的设备时,它 "restarts the app" 或调用 Home 片段。我不确定如何解决这个问题,因为它与 super.onCreate (savedInstance) 有关,但还没有找到如何实现它。我还尝试了清单上的 onConfigurationChanged 方法,但没有成功。我一直在从不同的教程中复制代码以使我的应用程序正常工作,所以我不确定我 posting 中的代码是否应该是我应该 post 的代码。谢谢
public class MainActivity extends FragmentActivity {
private DrawerLayout mDrawerLayout;
ImageView home;
Fragment fragment = null;
TextView appname;
ExpandableListView expListView;
HashMap<String, List<String>> listDataChild;
ExpandableListAdapter listAdapter;
List<String> listDataHeader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String fontPath = "neue.ttf";
setContentView(R.layout.activity_main);
home = (ImageView)findViewById(R.id.home);
home.setOnClickListener(homeOnclickListener);
appname = (TextView)findViewById(R.id.appname);
Typeface tf = Typeface.createFromAsset(this.getAssets(), fontPath);
appname.setTypeface(tf);
setUpDrawer();
}
private void setUpDrawer() {
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setScrimColor(getResources().getColor(android.R.color.transparent));
mDrawerLayout.setDrawerListener(mDrawerListener);
expListView = (ExpandableListView) findViewById(R.id.lvExp);
prepareListData();
listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
expListView.setAdapter(listAdapter);
fragment = new Home();
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit();
mDrawerLayout.closeDrawer(expListView);
expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
switch (groupPosition) {
case 0:
switch (childPosition) {
case 0:
fragment = new 1();
break;
case 1:
fragment = new 2();
break;
case 2:
fragment = new 3();
break;
...
}
break;
case 1:
switch (childPosition) {
case 0:
fragment = new 4();
break;
...
default:
break;
}
break;
...
}
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit();
mDrawerLayout.closeDrawer(expListView);
return false;
}
});
}...
在设备旋转时,activity 重新启动 - 这是明显的行为。如果您不希望重新创建 activity,您应该在 Manifest
文件中为 activity 添加 android:configChanges="orientation"
。
否则,当您的 activity 重新启动时,您可以通过像这样检查 savedInstanceState
来阻止调用 setUpDrawer()
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String fontPath = "neue.ttf";
setContentView(R.layout.activity_main);
home = (ImageView)findViewById(R.id.home);
home.setOnClickListener(homeOnclickListener);
appname = (TextView)findViewById(R.id.appname);
Typeface tf = Typeface.createFromAsset(this.getAssets(), fontPath);
appname.setTypeface(tf);
if(savedInstanceState == null){
setUpDrawer();
}
}