私の最初の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));
しかし、これは私がこれを処理するために適切な方法で考えるようになりました。私の質問:
- アプローチ#2と#3の間には違いがありますか?私が見ているところでは、
setIntent
は、基本的に項目が選択されるたびにメニュー項目のIntentを定義しています。それは私がやっていることは悪いことですか?一方、startActivity
はそれだけです。しかし、再び、アイテムが選択されるたびに新しい意図が作成され、次の質問につながります。 - アプローチ1では、私はその問題がなく、意図はアクティビティの
onCreate
メソッドで一度だけ作成されます(アクティビティが破壊されない限り)。しかし、パフォーマンス/メモリ賢明な(または関連するかもしれない他のもの)、次の間に違いはありますか?- a)は、今
onOptionsItemSelected
メニューハンドラ
- a)は、今
- に活動を開始し、テキストフィールドが
AboutActivity
であると仮定)onCreate
方法 - Bに一度意図を設定してください。私は、メニュー項目を押して、アクティビティを開いて、テキストフィールドに何かを入力し、戻る、メニュー項目をもう一度押して、テキストがなくなった。私は活動状態が持続し、テキストフィールドが満たされるという意図を1回だけ作成する(アプローチ#1)が、しかし、そうではありません、それは他のすべてのアプローチとまったく同じように機能し、私をさらに混乱させます。それらの違いは何ですか?
私が使用しているアクションバーコンポーネントで動作するように 'onCreateOptionsMenu'を設定することはできません。メソッドが呼び出されることはありません... –
目的を破るデバイス上のMenuを押すとメソッドが呼び出されるだけです。私はそれを使用することはできませんので、私は将来、従来のメニューが必要になります。私はアプローチ#1に行かなければならないと思う。 –