2011-09-21 118 views
0

在開發我的第一個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)); 

但是,這讓我想到用正確的方法來處理這個問題。我的問題:

  1. 在方法#2和#3之間,它們之間有什麼區別嗎?我看到它的方式,setIntent基本上是每次選擇項目時定義菜單項Intent。我認爲這是一件壞事?而startActivity就是這麼做的。但是,再次,每次選擇該項目時都會創建一個新的意圖,這導致我轉向下一個問題。
  2. 在方法#1,我沒有這個問題,其目的僅在活動的onCreate方法創建一次(只要活動不被破壞,我相信)。但是性能/記憶方面(或者其他可能相關的東西),以下是否有區別?
    • 一)在onCreate方法
    • b設置意圖一次)在onOptionsItemSelected菜單句柄
  3. 啓動活動現在,假設一個文本字段上AboutActivity。我按下菜單項並打開活動,在文本字段中輸入任何內容,然後返回,再次按菜單項,文本消失。我雖然只創建了一次意向(方法#1),活動狀態將持續存在並且文本字段將被填充。但事實並非如此,它只是像所有其他方法一樣行事,這使我更加困惑。他們之間有什麼區別?

回答

0

2很浪費,因爲像你說的那樣,每次調用它時都會創建這個意圖。這不是很浪費,因爲這些方法沒有被稱呼得太多,但這不是最佳做法。

如果你想做一些選項1,但在更好的位置,onCreateOptionsMenu()將是最好的選擇。

「菜單」是啓動活動的特例。通常情況下,你可以做一些類似#3的事情,只要你需要它就調用startActivity。菜單的setIntent只是在幕後進行。

我也認爲有一種方法可以通過XML來實現。但我無法確定地發現問題。

+0

我似乎無法使'onCreateOptionsMenu'與我正在使用的操作欄組件一起工作。該方法從來沒有被稱爲... –

+0

剛剛意識到,只有當我按下菜單上的設備,擊敗目的只調用該方法。我不能使用它,因爲我將來需要一個傳統的菜單。我想我必須採用第一種方法。 –

相關問題