Android MainActivity在新活动开始时已销毁?

Android MainActivity在新活动开始时已销毁?,android,android-activity,android-lifecycle,Android,Android Activity,Android Lifecycle,我有一个以ListView作为主要活动的活动。选择列表中的某个项目后,它将启动一个新活动,显示所选列表中该项目的详细信息。代码运行正常,相关细节如下: public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVi

我有一个以ListView作为主要活动的活动。选择列表中的某个项目后,它将启动一个新活动,显示所选列表中该项目的详细信息。代码运行正常,相关细节如下:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d("test","test");

    ListView listView=(ListView) findViewById(R.id.name_list);

    ListAdapter adapter=new SimpleAdapter(this,contactList,
            R.layout.list_item,new String[]{TAGS[2]},new int[]{R.id.list_name_display});

    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            Intent intent=new Intent(MainActivity.this,SingleContactActivity.class);
            intent.putExtra(EXTRA_CONTACT_POSITION,position);
            startActivity(intent);
        }
    });
}

我不想要这个

太糟糕了。这就是它的工作原理,你对此无能为力


请注意,这种情况并不总是发生。但它可能总是发生,你必须编写你的应用程序,以便它的所有活动都可以被销毁,并对用户透明地重新创建。这正是“不保留活动”开发人员选项的目的。一个性能良好的应用程序将在该选项打开时完美工作。

在设备/模拟器中检查开发人员选项。具体检查“不保留活动”是否未选中


注意:您不能总是保证父活动不会被销毁。如果系统内存不足,操作系统可能会终止父活动。在启动SingleContactActivity之前,您应该对此做好准备,并在父活动中保存所有必要的数据。

hmm。。您可以做的是,在新活动中不显示信息,而是使用对话框。这样,您的活动将保持活动状态,因此不会被重新创建

如果您想要全屏显示,可以使用:
MyDialog=newdialog(mContext,android.R.style.Theme\u NoTitleBar\u全屏显示)

使用自己的布局:
MyDialog.setContentView(R.layout.myLayout)

添加按钮(如后退按钮):
final button myBackButton=(button)MyDialog.findViewById(R.id.my_back_button)

并使用它们:

myBackButton.setOnClickListenernew View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MyDialog.dismiss();
    }
});
或覆盖键:

MyDialog.setOnKeyListener(new Dialog.OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface arg0, int keyCode,
                KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {  //Back key pressed
                MyDialog.dismiss();
            }
            return true;
        }
    });

希望这能帮到你;)

您如何在AndroidManifest中声明您的主要活动?您正在使用android:launchMode=“singleTop”@|-|我刚刚上传了文件。我只是离开了Android Studio的默认设置,不幸的是,一次只能有一个活动处于活动状态。使用片段代替。
MyDialog.setOnKeyListener(new Dialog.OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface arg0, int keyCode,
                KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {  //Back key pressed
                MyDialog.dismiss();
            }
            return true;
        }
    });