2016-11-23 15 views
1

これはリマインダーアプリのスクリーンショットです。+ボタンとボタンもあります。 +ボタンが押されると、editTextのダイアログが表示されます。ボタンがクリックされた場合コードを再利用する方法

enter image description here

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_add_task: 
       mClickedPosition = -1; 
       final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       LayoutInflater inflater = LayoutInflater.from(getActivity()); 
       View promptView = getActivity().getLayoutInflater().inflate(R.layout.dialog_with_edittext, null); 
       Button cancel = (Button) promptView.findViewById(R.id.cancelBtn); 
       Button save = (Button) promptView.findViewById(R.id.okBtn); 
       task = (EditText) promptView.findViewById(R.id.task); 
       time = (EditText) promptView.findViewById(R.id.time); 
       date = (EditText) promptView.findViewById(R.id.date); 
       final AlertDialog alert = builder.create(); 
       date.setOnClickListener(this); 

       time.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         Fragment fragDialog = getActivity().getSupportFragmentManager().findFragmentByTag("TimePicker"); 
         if (fragDialog == null) { // Fragment not added 
          FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
          tp.show(ft, "TimePicker"); 
         } else { 
          // already active 
         } 
        } 
       }); 

       cancel.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         alert.dismiss(); 
        } 
       }); 

       save.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         String addTask = task.getText().toString(); 
         String time1 = time.getText().toString(); 
         String date1 = date.getText().toString(); 
         if ((time1.trim().equals(""))|| (date1.trim().equals(""))|| (addTask.trim().equals(""))) { 
          Toast.makeText(getActivity(), " Not Completed", Toast.LENGTH_SHORT).show(); 
         } 
         else { 
          if (adapter != null) { 
           if (mClickedPosition == -1) { 
            adapter.add(iD, addTask, time1, date1); 
            insertTask(addTask, time1, date1); 
            listview.setAdapter(adapter); 
            alert.dismiss(); 
            check(); 
            retrieveList(name); 
           } 
          } 

          Calendar alarm = Calendar.getInstance(); 
          Calendar copy = (Calendar) alarm.clone(); 
          alarm.set(Calendar.YEAR, year1); 
          alarm.set(Calendar.MONTH, month1); 
          alarm.set(Calendar.DAY_OF_MONTH, day1); 
          alarm.set(Calendar.HOUR_OF_DAY, hour1); 
          alarm.set(Calendar.MINUTE, min1); 
          int result = alarm.compareTo(copy); 

          if(result < 0) { 
           alarm.add(Calendar.DATE, 1); 
          } 
          else 
          { 
           Intent myIntent = new Intent(getActivity(), MyReceiver.class); 
           pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 
           AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE); 
           alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent); 
          } 
         } 
        } 
       }); 

       alert.setView(promptView); 
       alert.show(); 
       return true; 

、それは+ボタンとまったく同じダイアログが開きます。私の質問は、コードが少し短く見えるようにコードを再利用する方法があるか、コードをコピーしてボタンonClickに貼り付けなければならないかということです。

私の活動の完全なコードを表示してください。あなたが見ることができるように、コードのほとんどが同じ(+ボタン、ボタンともリストビュークリック)している

http://pastebin.com/HEKcmVK3

+0

何の内側メソッドを呼び出すことができますか?あなたはそれを使用する場合両方のボタンからそれを呼び出すことができます –

答えて

0

あなたは、コードのこの部分のメソッドを作成してからちょうどDialogFragmentの使用についてonclicklistener

String addTask = task.getText().toString(); 
String time1 = time.getText().toString(); 
String date1 = date.getText().toString(); 
if ((time1.trim().equals(""))|| (date1.trim().equals(""))|| (addTask.trim().equals(""))) { 
    Toast.makeText(getActivity(), " Not Completed", Toast.LENGTH_SHORT).show(); 
} 
else { 
    if (adapter != null) { 
     if (mClickedPosition == -1) { 
      adapter.add(iD, addTask, time1, date1); 
      insertTask(addTask, time1, date1); 
      listview.setAdapter(adapter); 
      alert.dismiss(); 
      check(); 
      retrieveList(name); 
     } 
    } 

    Calendar alarm = Calendar.getInstance(); 
    Calendar copy = (Calendar) alarm.clone(); 
    alarm.set(Calendar.YEAR, year1); 
    alarm.set(Calendar.MONTH, month1); 
    alarm.set(Calendar.DAY_OF_MONTH, day1); 
    alarm.set(Calendar.HOUR_OF_DAY, hour1); 
    alarm.set(Calendar.MINUTE, min1); 
    int result = alarm.compareTo(copy); 

    if(result < 0) { 
     alarm.add(Calendar.DATE, 1); 
    } 
    else 
    { 
     Intent myIntent = new Intent(getActivity(), MyReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 
     AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent); 
    } 
} 
+0

しかし、ダイアログについてはどうですか? – John

1

あなたはそれをすることによって、カスタムダイアログクラスを作成し、表示する方法を記述し実行する必要があります。 そして、+ボタンとボタンをクリックして、そのクラスのインスタンスを作成して表示します。

+0

再び私のポストを確認してください – John

関連する問題