2011-07-04 7 views
2

これは初心者向けの質問の1つになると100%確信していますが、ここではそれは...アプリで利用できるメソッドはありますか?

1つのアクティビティにメソッドを書き込んで、そこからアクセスできる方法はありますかその他?

例: ごとに、利用可能なオプションが異なる必要があるので、私は私のアプリでは6つのactivites、それ自身のmenu.xmlとそれぞれを持っている、と私はこれらのメニューに示すように設定さ&メニューアイテムがあります。

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.calculator_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     //Handle item selection 
     switch (item.getItemId()) { 
     case R.id.menuItem_calculator_Help: 
      helpDialogGo(); 
      return true; 
     case R.id.menuItem_calculator_Settings: 
      //settingsActivityGo(); 
      return true; 
     case R.id.menuItem_calculator_Share: 
      shareGo(); 
      return true; 
     case android.R.id.home: 
      // app icon in Action Bar clicked; go home 
      Intent uptohome = new Intent(this, Main.class); 
      uptohome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(uptohome); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

次のいずれかの方法の例は次のとおりです。

private void helpDialogGo() { 
     Toast.makeText(this, "help", Toast.LENGTH_LONG).show(); 
     AlertDialog.Builder alt_bld = new AlertDialog.Builder(this); 
     alt_bld.setMessage("Sorry, no help has been written since this application is still in development. This is a prerelease version.") 
     .setCancelable(false) 
     .setPositiveButton("Cool", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
     // Action for 'Yes' Button 
     dialog.cancel(); 
     } 
     }) 
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
     // Action for 'NO' Button 
     dialog.cancel(); 
     } 
     }); 
     AlertDialog alert = alt_bld.create(); 
     // Title for AlertDialog 
     alert.setTitle("Pixel Help"); 
     // Icon for AlertDialog 
     alert.setIcon(R.drawable.question); 
     alert.show(); 
    } 

だから、すべての活動の間で共有このカスタムメソッドを持っており、ボタンはそれらのそれぞれに押されたときにそれを実行する方法は避けるために、そこにあります大規模なamounを持つ私のアプリで複製されたコードは何ですか?

もしそうなら、私が打つことができる穴がありますか? (メニュー項目の中にはダイアログを表示するものもあれば、新しいアクティビティに移動するものもあります)

答えて

2

あなたはすべての活動に同様のmenuitemsを持っていますか?同じ数のアイテムではあるが動作が異なるはいの場合... onCreateOptionsMenuおよびonOptionsItemSelected()メソッドをオーバーライドするBaseActivityを作成する方法(上の例で示したとおり)。すべてのアクティビティはこのBaseActivityから継承し、メニュー処理メソッドをオーバーライドする必要があります。例えば。 helpDialogGo()は新しいクラスに移動します。

だから、BaseActivityにはonCreateOptionsMenuとonOptionsItemSelected()メソッドがあります。すべてのmenuItemアクション(つまりhelpDialogGo()など)を空のメソッドとして追加します。継承されたクラスはmenuItemアクションをオーバーライドします。

各アクティビティでメニューアイテムが似ていない場合は、各アクティビティのメニューを作成する方がよいでしょう。

EDIT:

ないあなたがより多くを期待してください。私はそれを明確にしたと思った。もう一度試してみましょう。

クラスBaseActivityActivityです。

BaseActivity extends Activity { 

    // Copy your onCreateOptionsMenu() and onOptionsItemSelected() methods here 

    protected void helpDialogGo() { } 

    // ... other methods 
} 

クラスMyActivity1BaseActivityを拡張します。

MyActivity1 extends BaseActivity { 

    // Copy your helpDialogGo() code in full here and then make 
    // any specific changes to menu behaviour based on activity. 

} 

クラスMyActivity2

MyActivity2 extends BaseActivity { 
    // Copy your helpDialogGo() code in full here and then make 
    // any specific changes to menu behaviour based on activity. 
} 
+0

これはこれを実行するための実際の方法です。 Android固有のものではなく、クラス設計のベストプラクティスとの関連性が高いです。 – omermuhammed

+0

私が始める前にもう少し詳しく説明できますか? – rabbitt

+0

@omermuhammedが同意します。 rabs83ないあなたはもっと期待してください@ – GSree

1

もちろん、希望の機能をカプセル化したカスタムクラスをいくつか作成して、活動。これは、アクティビティ自体に直接実装を配置するよりも優れた抽象化です(すべてが等しく、これまで説明した内容に基づいています)。

あなた自身がインプリメントを複製していることがわかったときにはいつも、このコードを自分のクラスに振り替えるよい場所です。

+0

オーケーBaseActivityを拡張するので、それは良いアイデアを_is_?今私はそれについてどうやって行くのですか?その中に各メソッドを持つ1つの新しいクラスか、その中のすべてのクラス?私は尋ねることがたくさんあることを知っています。サンプルコードは素晴らしいでしょう。ご協力いただきありがとうございます! – rabbitt

関連する問題