2011-09-21 14 views
0

私の最初のAndroidアプリを開発しているうちに、新しいアクティビティを開始する3つの方法があります(おそらく私が気づいていないことが多分あります)、それらが異なっているか、同じ方法。Androidで新しいアクティビティを開始する適切な方法は何ですか?

たとえば、私は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()); 
    } 

    @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); 
    } 

} 

第三のアプローチを:コードの組織を簡素化するために私の第二のアプローチ、

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)); 
    } 
} 

、私はこのように自分の方法ですべてのメニュー項目の選択を扱う開始しました以前のものと非常に似ていますが、唯一の違いはAboutActivityを開始するコード行です。代わりに:

item.setIntent(new Intent(this, AboutActivity.class)); 

私のように変更:

startActivity(new Intent(this, AboutActivity.class)); 

しかし、これは私がこれを処理するために適切な方法で考えるようになりました。私の質問:

  1. アプローチ#2と#3の間には違いがありますか?私が見ているところでは、setIntentは、基本的に項目が選択されるたびにメニュー項目のIntentを定義しています。それは私がやっていることは悪いことですか?一方、startActivityはそれだけです。しかし、再び、アイテムが選択されるたびに新しい意図が作成され、次の質問につながります。
  2. アプローチ1では、私はその問題がなく、意図はアクティビティのonCreateメソッドで一度だけ作成されます(アクティビティが破壊されない限り)。しかし、パフォーマンス/メモリ賢明な(または関連するかもしれない他のもの)、次の間に違いはありますか?
    • a)は、今onOptionsItemSelectedメニューハンドラ
  3. に活動を開始し、テキストフィールドがAboutActivityであると仮定)onCreate方法
  4. Bに一度意図を設定してください。私は、メニュー項目を押して、アクティビティを開いて、テキストフィールドに何かを入力し、戻る、メニュー項目をもう一度押して、テキストがなくなった。私は活動状態が持続し、テキストフィールドが満たされるという意図を1回だけ作成する(アプローチ#1)が、しかし、そうではありません、それは他のすべてのアプローチとまったく同じように機能し、私をさらに混乱させます。それらの違いは何ですか?

答えて

0

2は無駄です。あなたが言ったように、それが呼び出されるたびにその意図を作成しているからです。これらのメソッドはあまり呼び出されていないので、ひどく無駄では​​ありませんが、ベストプラクティスではありません。

オプション1のような操作を行いたい場合は、より良い場所でonCreateOptionsMenu()を使用するのが最適です。

「メニュー」は、アクティビティを開始する特別なケースです。通常は#3のようなことをします。必要なときにstartActivityを呼び出すだけです。メニューのsetIntentは背後でそれを行います。

XMLでこれを行う方法もあると思います。しかし、私は確かに見つけ出すのが難しいです。

+0

私が使用しているアクションバーコンポーネントで動作するように 'onCreateOptionsMenu'を設定することはできません。メソッドが呼び出されることはありません... –

+0

目的を破るデバイス上のMenuを押すとメソッドが呼び出されるだけです。私はそれを使用することはできませんので、私は将来、従来のメニューが必要になります。私はアプローチ#1に行かなければならないと思う。 –

関連する問題