私は私のプロジェクト内にあるJavaクラスの量を減らそうとしています。私は、ユーザーが自分のルーチンを編集できるようにEDIT画面と、ルーチンを表示するためにユーザーがDISPLAY画面で複数の日を持つルーチンプランナーアプリケーションを作成しました。次のコードは、それぞれの例ですが、私は毎日のために1つを持っていることを覚えています(例えば、MondayRoutineEdit.java、TuesdayRoutineEdit.java .........、MondayRoutineDisplay.java、TuesdayRoutineDisplay.javaの場合...私のコードを減らすには? 16のJavaファイルをわずか4つに減らしますか?
- RoutineEdit.java: - ......)また、私はので、私はそれらすべてを管理するだけで2つのファイルを持つことができ、これを削減することができますどのようにデータベースとのMainMenu
ためのコードが含まれています
- RoutineDisplay.javaので、合計で
、私が持っているでしょう私のプロジェクトを管理する4つだけのJavaファイルの代わりに16
メインメニュークラスの
public class MainMenu extends AppCompatActivity {
private Button mondaybutton, tuesdaybutton, wednesdaybutton, thursdaybutton, fridaybutton, saturdaybutton, sundaybutton;
public int buttonSelectedID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainmenu);
mondaybutton = (Button) findViewById(R.id.mondaybutton);
tuesdaybutton = (Button) findViewById(R.id.tuesdaybutton);
wednesdaybutton = (Button) findViewById(R.id.wednesdaybutton);
thursdaybutton = (Button) findViewById(R.id.thursdaybutton);
fridaybutton = (Button) findViewById(R.id.fridaybutton);
saturdaybutton = (Button) findViewById(R.id.saturdaybutton);
sundaybutton = (Button) findViewById(R.id.sundaybutton);
MediaPlayer mainmenuprompt = MediaPlayer.create(MainMenu.this, R.raw.mainmenuprompt);
mainmenuprompt.start();;
// Monday Routine Button
mondaybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Monday");
Intent i = new Intent(MainMenu.this,MondayRoutineDisplay.class);
Log.d("SUCCESSFUL", "Loading Monday Routine");
MediaPlayer mondayroutineselected = MediaPlayer.create(MainMenu.this, R.raw.mondayroutineselected);
mondayroutineselected.start();
startActivity(i);
}
});
// Tuesday Routine Button
tuesdaybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Tuesday");
Intent i = new Intent(MainMenu.this,TuesdayRoutineDisplay.class);
Log.d("SUCCESSFUL", "Loading Tuesday Routine");
MediaPlayer tuesdayroutineselected = MediaPlayer.create(MainMenu.this, R.raw.tuesdayroutineselected);
tuesdayroutineselected.start();
startActivity(i);
}
});
// Wednesday Routine Button
wednesdaybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Wednesday");
Intent i = new Intent(MainMenu.this,WednesdayRoutineDisplay.class);
Log.d("SUCCESSFUL", "Loading Wednesday Routine");
MediaPlayer wednesdayroutineselected = MediaPlayer.create(MainMenu.this, R.raw.wednesdayroutineselected);
wednesdayroutineselected.start();
startActivity(i);
}
});
// Thursday Routine Button
thursdaybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Thursday");
Intent i = new Intent(MainMenu.this,ThursdayRoutineDisplay.class);
Log.d("SUCCESSFUL", "Loading Thursday Routine");
MediaPlayer thursdayroutineselected = MediaPlayer.create(MainMenu.this, R.raw.thursdayroutineselected);
thursdayroutineselected.start();
startActivity(i);
}
});
// Friday Routine Button
fridaybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Friday");
Intent i = new Intent(MainMenu.this,FridayRoutineDisplay.class);
Log.d("SUCCESSFUL", "Loading Friday Routine");
MediaPlayer fridayroutineselected = MediaPlayer.create(MainMenu.this, R.raw.fridayroutineselected);
fridayroutineselected.start();
startActivity(i);
}
});
// Saturday Routine Button
saturdaybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Saturday");
Intent i = new Intent(MainMenu.this,SaturdayRoutineDisplay.class);
Log.d("SUCCESSFUL", "Loading Saturday Routine");
MediaPlayer saturdayroutineselected = MediaPlayer.create(MainMenu.this, R.raw.saturdayroutineselected);
saturdayroutineselected.start();
startActivity(i);
}
});
// Saturday Routine Button
sundaybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Sunday");
Intent i = new Intent(MainMenu.this,SundayRoutineDisplay.class);
Log.d("SUCCESSFUL", "Loading Sunday Routine");
MediaPlayer sundayroutineselected = MediaPlayer.create(MainMenu.this, R.raw.sundayroutineselected);
sundayroutineselected.start();
startActivity(i);
}
});
}
月曜日ルーチン編集クラス
public class MondayRoutineEdit extends AppCompatActivity {
Database myDb;
private Button DisplayRoutineButton;
private Button ClearRoutineButton;
private static int ImageID = 0;
ImageView activityslotlocationa, activityslotlocationb, activityslotlocationc, activityslotlocationd, activityslotlocatione, activityslotlocationf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.routineeditscreen);
myDb = new Database(this);
DisplayRoutineButton = (Button) findViewById(R.id.displayroutinebutton);
ClearRoutineButton = (Button) findViewById(R.id.clearroutinebutton);
// Display Routine Button
DisplayRoutineButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Display Schedule");
Intent i = new Intent(MondayRoutineEdit.this, MondayRoutineDisplay.class);
Log.d("SUCCESSFUL", "Loading Monday Routine Display");
startActivity(i);
}
});
// Delete Routine Button
ClearRoutineButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Delete Routine");
deleteRoutine();
Log.d("SUCCESSFUL", "Routine Deleted");
}
});
// Audio Feedback
ImageView artactivity = (ImageView) this.findViewById(R.id.artactivityimage);
final MediaPlayer artsoundeffect = MediaPlayer.create(this, R.raw.art);
artactivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
artsoundeffect.start();
}
});
ImageView bedtimestoryactivity = (ImageView) this.findViewById(R.id.bedtimestoryactivityimage);
final MediaPlayer bedtimestorysoundeffect = MediaPlayer.create(this, R.raw.bedtimestory);
bedtimestoryactivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bedtimestorysoundeffect.start();
}
});
ImageView brushteethactivity = (ImageView) this.findViewById(R.id.brushteethactivityimage);
final MediaPlayer brushteethsoundeffect = MediaPlayer.create(this, R.raw.brushteeth);
brushteethactivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
brushteethsoundeffect.start();
}
});
ImageView combhairactivity = (ImageView) this.findViewById(R.id.combhairactivityimage);
final MediaPlayer combhairsoundeffect = MediaPlayer.create(this, R.raw.combhair);
combhairactivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
combhairsoundeffect.start();
}
});
// findViewById
artactivity = (ImageView) findViewById(R.id.artactivityimage);
bedtimestoryactivity = (ImageView) findViewById(R.id.bedtimestoryactivityimage);
brushteethactivity = (ImageView) findViewById(R.id.brushteethactivityimage);
combhairactivity = (ImageView) findViewById(R.id.combhairactivityimage);
activityslotlocationa = (ImageView) findViewById(R.id.activitydisplayslota);
activityslotlocationb = (ImageView) findViewById(R.id.activitydisplayslotb);
activityslotlocationc = (ImageView) findViewById(R.id.activitydisplayslotc);
activityslotlocationd = (ImageView) findViewById(R.id.activitydisplayslote);
activityslotlocatione = (ImageView) findViewById(R.id.activitydisplayslotd);
activityslotlocationf = (ImageView) findViewById(R.id.activitydisplayslotf);
// Long click listeners
artactivity.setOnLongClickListener(longClickListener);
bedtimestoryactivity.setOnLongClickListener(longClickListener);
brushteethactivity.setOnLongClickListener(longClickListener);
combhairactivity.setOnLongClickListener(longClickListener);
activityslotlocationa.setOnDragListener(dragListener);
activityslotlocationb.setOnDragListener(dragListener);
activityslotlocationc.setOnDragListener(dragListener);
activityslotlocationd.setOnDragListener(dragListener);
activityslotlocatione.setOnDragListener(dragListener);
activityslotlocationf.setOnDragListener(dragListener);
getRoutine();
}
View.OnLongClickListener longClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View imageLongClickByUser) {
View.DragShadowBuilder myShadowBuilder = new View.DragShadowBuilder(imageLongClickByUser);
imageLongClickByUser.startDragAndDrop(null, myShadowBuilder, imageLongClickByUser, 0);
//Grab ID so not to re-grab at every comparison
int selectedImage = imageLongClickByUser.getId();
//Check which View is clicked on and save globally
//activities
if (selectedImage == R.id.artactivityimage)
ImageID = R.drawable.art;
else if (selectedImage == R.id.bedtimestoryactivityimage)
ImageID = R.drawable.bedtimestory;
else if (selectedImage == R.id.brushteethactivityimage)
ImageID = R.drawable.brushteeth;
else if (selectedImage == R.id.combhairactivityimage)
ImageID = R.drawable.combhair;
return true;
}
};
View.OnDragListener dragListener = new View.OnDragListener() {
@Override
public boolean onDrag(View imageDropped, DragEvent event) {
int dragEvent = event.getAction(); // returns an action type that indicates the state of the drag and drop operation
final View view = (View) event.getLocalState(); // Returns the local state object sent to the system as part of the call to startDragAndDrop().
switch (dragEvent) {
case DragEvent.ACTION_DROP:
ImageView imageOfActivitySlot = (ImageView) imageDropped; //Check if we are dropping onto an imageView
if (imageDropped != null) //If the view is not equal to null then...
imageOfActivitySlot.setImageResource(ImageID); //Set the resource to be the image picked up earlier
MediaPlayer mymedia = MediaPlayer.create(MondayRoutineEdit.this, R.raw.whoosh);
mymedia.start();
boolean routineInserted = myDb.insertNewRoutine(ImageID, currentDay, imageDropped.getId());
if (routineInserted) {
Toast.makeText(MondayRoutineEdit.this, "Activity Inserted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MondayRoutineEdit.this, "Activity Not Inserted", Toast.LENGTH_LONG).show();
}
}
return true;
}
};
private void getRoutine() {
Cursor result = myDb.getRoutineForCurrentDay(currentDay);
if (result.getCount() == 0) {
} else {
//data found, show on screen
while (result.moveToNext()) {
int ActivityImage = result.getInt(2);
int Slot = result.getInt(3);
ImageView emptySlot = (ImageView) findViewById(Slot);
emptySlot.setImageResource(ActivityImage);
}
}
}
private void deleteRoutine() {
myDb.deleteRoutineForCurrentDay(currentDay);
Intent intent = getIntent();
startActivity(intent);
MediaPlayer mymedia = MediaPlayer.create(MondayRoutineEdit.this, R.raw.clearroutine);
mymedia.start();
}
}
月曜日の表示ルーチン・クラス
public class MondayRoutineDisplay extends AppCompatActivity {
private Button EditRoutineButton;
private Button MainMenuButton;
Database myDb;
private String currentDay = "monday";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.routinedisplayscreen);
myDb = new Database(this);
EditRoutineButton = (Button) findViewById(R.id.editroutinebutton);
MainMenuButton = (Button) findViewById(R.id.mainmenubutton);
getRoutine();
// Edit Routine Button
EditRoutineButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Edit Routine");
Intent i = new Intent(MondayRoutineDisplay.this, MondayRoutineEdit.class);
Log.d("SUCCESSFUL", "Loading Monday Edit Screen");
startActivity(i);
}
});
// Main Menu Button
MainMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("BUTTON CLICKED", "Main Menu");
Intent i = new Intent(MondayRoutineDisplay.this, MainMenu.class);
Log.d("SUCCESSFUL", "Loading Main Menu");
startActivity(i);
}
});
}
private void getRoutine() {
Cursor result = myDb.getRoutineForCurrentDay(currentDay);
if (result.getCount() == 0) {
} else {
//data found, show on screen
while (result.moveToNext()) {
int ActivityImage = result.getInt(2);
int Slot = result.getInt(3);
ImageView emptySlot = (ImageView) findViewById(Slot);
emptySlot.setImageResource(ActivityImage);
}
}
}
}
Databaseクラス
public class Database extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "application.db";
public static final int DATABASE_VERSION = 9;
public static final String RoutineTable = "Routines";
public static final String RoutineColumn1 = "DayOfWeek";
public static final String RoutineColumn2 = "Activity";
public static final String RoutineColumn3 = "Slot";
public Database(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE `Routines` (`Routine` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,`DayOfWeek` TEXT NOT NULL,`Activity` INTEGER NOT NULL, `Slot` INTEGER NOT NULL);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
onCreate(db);
}
// INSERT OR UPDATE DATA INTO DATABASE
public boolean insertNewRoutine(int activityImage, String selectedDay, int activitySlot)
{
SQLiteDatabase db = this.getWritableDatabase();
// db.execSQL("DELETE FROM " + RoutineTable + " WHERE DayOfWeek ='" + selectedDay + "' AND Slot =" + activitySlot);
ContentValues contentValues = new ContentValues();
contentValues.put(RoutineColumn1,selectedDay);
contentValues.put(RoutineColumn2,activityImage);
contentValues.put(RoutineColumn3,activitySlot);
long result = db.insert(RoutineTable, null, contentValues);
if(result == -1)
return false;
else
return true;
}
// RETRIEVE DATA FROM DATABASE FOR CURRENT DAY
public Cursor getRoutineForCurrentDay(String selectedDay)
{
SQLiteDatabase db = this.getWritableDatabase();
Cursor result = db.rawQuery("select * from " + RoutineTable + " WHERE DayOfWeek = '" + selectedDay + "'", null);
return result;
}
// DELETE DATA IN DATABASE FOR CURRENT DAY
public void deleteRoutineForCurrentDay(String selectedDay)
{
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE FROM " + RoutineTable + " WHERE DayOfWeek ='" + selectedDay + "'");
}
}
あなたDisplayクラスのオブジェクトを表示します平日の概念をカプセル化し、既存のコードを再利用して平日の一般的な概念を処理します。 – jdv
それでは、どうすればいいですか? – MarkW
これは残念なことに、多くの注目を集めることはないOO設計に関する一般的な質問です。しかし、その考えは、あなたがそのデータにしたいデータとものを持っているということです。さらに、クラスを別々のドメインに分割したい(これは考慮されているように見えます)。入力を受け取り、その入力に基づいてメソッドを呼び出すための入力を使用する、ある種のUIクラスが必要です。平日にハードコードされた場所には、おそらくコンストラクタのパラメータとして渡すクラス変数が必要です。 – jdv