在開發我的第一個Android應用程序時,我提出了3種不同的方式來開始一個新的活動(有可能更多我不知道),我不明白他們是不同的,或者他們基本上工作一樣的方法。什麼是在Android中啓動新Activity的正確方法?
例如,我有一個MainActivity
與菜單(它是一個ActionBar組件,但工作就像一個菜單)。該菜單可以選擇打開AboutActivity
。
我的第一種方法是這樣的:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = (ActionBar)findViewById(R.id.actionbar);
getMenuInflater().inflate(R.menu.actionbar_main, actionBar.asMenu());
actionBar.findAction(R.id.actionbar_item_home).setIntent(new Intent(this, AboutActivity.class));
}
}
我的第二個辦法,簡化代碼組織,我開始處理自己的方法,所有菜單項選擇是這樣的:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = (ActionBar)findViewById(R.id.actionbar);
getMenuInflater().inflate(R.menu.actionbar_main, actionBar.asMenu());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.actionbar_item_home:
item.setIntent(new Intent(this, AboutActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
第三種方法與前一個非常相似,唯一不同的是在開始AboutActivity
的代碼行中。相反的:
item.setIntent(new Intent(this, AboutActivity.class));
我改成:
startActivity(new Intent(this, AboutActivity.class));
但是,這讓我想到用正確的方法來處理這個問題。我的問題:
- 在方法#2和#3之間,它們之間有什麼區別嗎?我看到它的方式,
setIntent
基本上是每次選擇項目時定義菜單項Intent。我認爲這是一件壞事?而startActivity
就是這麼做的。但是,再次,每次選擇該項目時都會創建一個新的意圖,這導致我轉向下一個問題。 - 在方法#1,我沒有這個問題,其目的僅在活動的
onCreate
方法創建一次(只要活動不被破壞,我相信)。但是性能/記憶方面(或者其他可能相關的東西),以下是否有區別?- 一)在
onCreate
方法 - b設置意圖一次)在
onOptionsItemSelected
菜單句柄
- 一)在
- 啓動活動現在,假設一個文本字段上
AboutActivity
。我按下菜單項並打開活動,在文本字段中輸入任何內容,然後返回,再次按菜單項,文本消失。我雖然只創建了一次意向(方法#1),活動狀態將持續存在並且文本字段將被填充。但事實並非如此,它只是像所有其他方法一樣行事,這使我更加困惑。他們之間有什麼區別?
我似乎無法使'onCreateOptionsMenu'與我正在使用的操作欄組件一起工作。該方法從來沒有被稱爲... –
剛剛意識到,只有當我按下菜單上的設備,擊敗目的只調用該方法。我不能使用它,因爲我將來需要一個傳統的菜單。我想我必須採用第一種方法。 –