Java と Android を学んで愛用していますが、道のりは長いです。これはベストプラクティスの質問だと思います。私の Android アクティビティには 6 つのクラスがあります。それらのいくつかは、別のクラスから複製したメソッドを呼び出しています。メソッドを別のクラスから呼び出すことができるのに、メソッドを複製するのは冗長に思えます。また、それらすべてを 1 つのクラスで管理する方が簡単だと思います。(主な活動でしょうか?) 私の質問は: 複数のクラスから同じメソッドを呼び出すためのベスト プラクティスは何ですか? たとえば、私のクラスは次のとおりです。
メイン アクティビティ GameSelector Game1Home Game1
すべてのクラスで同じメソッドがいくつかあります。それらを getPrefs() および setPrefs() と呼びましょう。私はそれらに何も渡していません。それらはどのクラスに入る必要があり、別のクラスからどのように呼び出すことができますか?
編集 - いくつかの非常に役立つ回答のおかげで、完全に機能する Configurations クラスがあり、他の 6 つのクラスははるかにきれいに見えます! これは維持するのが非常に簡単で、作成中にいくつかの優れた指針を学びます. 他の誰かに役立つかもしれない場合に備えて、完成したクラスをここに投稿しています。次のように、他のクラスからメソッドを呼び出すことができます。
Configurations.getPrefs(this);
次のように、構成ファイルでグローバルとして定義した静的変数を参照します。
Configurations.buttonClicked.start();
Configurations.java:
public class Configurations extends Activity {
static MediaPlayer buttonClicked;
static MediaPlayer instructionsAudio;
static MediaPlayer messageAudio;
static MediaPlayer correctNum_sound;
static MediaPlayer incNuma_sound;
static MediaPlayer incNumb_sound;
static String storeChildsName;
static String storeRequestedRange;
static String storeVoiceChoice;
static Intent i;
public static void setupPrefs(final Activity a) {
ImageButton settingsClicked = ((ImageButton) a.findViewById(R.id.prefButton));
settingsClicked.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
ImageView settingsClicked = ((ImageView) a.findViewById(R.id.prefButton));
settingsClicked.setImageResource(R.drawable.settings_button_clicked);
buttonClicked = MediaPlayer.create(a, R.raw.click);
buttonClicked.start();
Intent settingsActivity = new Intent(a.getBaseContext(),
Preferences.class);
a.startActivity(settingsActivity);
}
});
}
public static void getPrefs(final Activity a) {
// Get the xml/preferences.xml preferences
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(a.getBaseContext());
storeChildsName = prefs.getString("editTextPref",
"Friend");
storeRequestedRange = prefs.getString("listPref", "3");
storeVoiceChoice = prefs.getString("voices", "1");
}
public static void setupMusicToggle(final Activity a) {
i=new Intent(a, MyMusicService.class);
final ToggleButton togglebutton =(ToggleButton)a.findViewById(R.id.music_toggle);
togglebutton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
if (togglebutton.isChecked()) {
Toast.makeText(a, "Music on.", Toast.LENGTH_SHORT).show();
a.startService(i);
} else {
a.stopService(i);
Toast.makeText(a, "Music off.", Toast.LENGTH_SHORT).show();
} }});
}
public static void returnHome(View view, Activity a) {
ImageView homeClicked = (ImageView) a.findViewById(R.id.home);
homeClicked.setImageResource(R.drawable.homebuttonclicked);
buttonClicked = MediaPlayer.create(a, R.raw.click);
buttonClicked.start();
Intent intent = new Intent(a, GameSelector.class);
a.startActivity(intent);
}
public static void releaseMP(Activity a) {
if (buttonClicked != null) {
buttonClicked.stop();
buttonClicked.release();}
if (instructionsAudio != null) {
instructionsAudio.stop();
instructionsAudio.release();}
if (messageAudio != null) {
messageAudio.stop();
messageAudio.release();
}
if (correctNum_sound != null){
correctNum_sound.stop();
correctNum_sound.release();
}
if (incNuma_sound != null) {
incNumb_sound.stop();
incNuma_sound.release();
}
if (incNumb_sound !=null) {
incNumb_sound.stop();
incNumb_sound.release();
}
}
public static boolean isMyServiceRunning(Activity a) {
ActivityManager manager = (ActivityManager) a.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (MyMusicService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
}
これが私を助けたのと同じくらい誰かを助けることを願っています!
PS - このコードに改善の余地がある場合は、共有してください。学ぶことがたくさんあります =)