2017-07-01 3 views
-2

私は私のプロジェクト内にある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 + "'"); 
} 
} 
+0

あなたDisplayクラスのオブジェクトを表示します平日の概念をカプセル化し、既存のコードを再利用して平日の一般的な概念を処理します。 – jdv

+0

それでは、どうすればいいですか? – MarkW

+0

これは残念なことに、多くの注目を集めることはないOO設計に関する一般的な質問です。しかし、その考えは、あなたがそのデータにしたいデータとものを持っているということです。さらに、クラスを別々のドメインに分割したい(これは考慮されているように見えます)。入力を受け取り、その入力に基づいてメソッドを呼び出すための入力を使用する、ある種のUIクラスが必要です。平日にハードコードされた場所には、おそらくコンストラクタのパラメータとして渡すクラス変数が必要です。 – jdv

答えて

0

私はあなたが毎日のクラスを持つ必要はないと思います。代わりにJavaが知られている目的のプログラミングプロパティを使用してください。単にDisplayRoutineClassクラスとRoutineEditをオブジェクトクラスとして使用できます。毎日のためには、オブジェクト、元の作成:

RoutineEdit mondayRoutine = new RoutineEdit(); 

をして、あなたが解決する必要がある問題が2または4にすべてのファイルを崩壊する方法ではなく、どのように

+0

私のコードを変更するにはどうすればいいですか?申し訳ありませんが、AndroidとJavaの新しいバージョンです。 – MarkW

+0

ちょうど私が答えを書きました。オブジェクトRuntineEditを使用してファイルを作成し、別の日に異なるプロパティを割り当てます。 RuntineEditは基本的にデータ所有者であり、作成されたインスタンスは互いに独立しています(静的ではありません)。 javaのクラスとオブジェクトの詳細については、https://www.tutorialspoint.com/java/java_object_classes.htmとOraclesの公式ドキュメントを参照してください。 –

+0

ありがとうございます。私はRoutineEditをどこに置くでしょうか?MondayRoutine = new RoutineEdit(); – MarkW

関連する問題