2016-05-09 4 views
1

私はDialogFragmentから継承するDatepickerFragmentを持っています。私のメイン・フラグメントには2つの編集テキストがあります。最初のものは開始日、もう1つは終了日です。これらはいくつかのユーザー操作のためです。ユーザーが最初にedittextをクリックして日付を選択し、もう1つは同じ方法ですが、私はDatepickerFragment.Whatでedittextsを処理する方法を混乱させました。datepickerの使い方dialogdragment別のedittext

etOverFlowingStaringDate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      FragmentManager fragmentManager = getActivity().getFragmentManager(); 
      DatePickerFragment datePickerFragment = new DatePickerFragment(); 
      datePickerFragment.show(fragmentManager, "datepicker"); 
     } 
    }); 

DatepickerFragment.java

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 

     // Create a new instance of DatePickerDialog and return it 
     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     populateSetDate(year, monthOfYear+1, dayOfMonth); 
    } 

    private void populateSetDate(int year, int month, int dayOfMonth) { 

     String datetime = dayOfMonth + "/" + month + "/" + year ; 

     //EditText edtext = (EditText)getView().findViewById(R.id.overflow_starting_date); 
     // The edittext is changable it is not a good way to define in here 

    } 
} 

答えて

1

私は通常、別のクラスで私のカスタムDatePickerFragment Sを作成し、次にあなたが達成しようとしているものを実装するリスナーモデルを使用します。基本的に:あなたのDatePickerFragmentで

、インタフェースを定義 -

public interface OnDateChosenListener { 
    void onDateChosen(int year, int month, int day); 
} 

すると、そのインターフェイスのためのあなたのDatePickerFragmentクラス内のプライベート変数を定義 -

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 
    private OnDateChosenListener mOnDateChosenListener = null; 

    ... 

をOnDateChosenListenerを設定する機能を追加 -

public void setOnDateChosenListener(OnDateChosenListener listener) { 
    mOnDateChosenListener = listener; 
} 

DatePi

@Override 
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
    if (mOnDateChosenListener != null) { 
     mOnDateChosenListener.onDateChosen(year, monthOfYear, dayOfMonth); 
    } 
} 

最後に、最も重要な - それが存在する場合ckerFragmentクラスは、リスナーにイベントや価値観に沿って渡します。

FragmentManager fragmentManager = getActivity().getFragmentManager(); 
DatePickerFragment datePickerFragment = new DatePickerFragment(); 
datePickerFragment.addOnDateChosenListener(new OnDateChosenListener() { 
    public void onDateChosen(int year, int month, int day) { 
     // use values to change EditText value 
    } 
} 
datePickerFragment.show(fragmentManager, "datepicker"); 

リスナーモデルがお勧めしており、広くAndroidのフレームワークで使用されている - あなたは新しいDatePickerFragmentは、あなたのケースでは、活動が使う場所にリスナーを追加することを忘れないでください。

+0

addOnDateChosenListenerはどこで定義しましたか? – Trinity

+0

SetOnDateChosenListener私はそれを得ました:)おかげでたくさん;) – Trinity

1

私はあなたの質問を非常にうまく理解しているかどうかはわかりませんが、ユーザが一度それを選択すると、EditTextの日付を取得しようとしていますか?その場合は...

は、あなたの活動/フラグメントであなたの日付を受信するインターフェイスを作成します。

interface DateReceiver { 
    void update(int year, int month, int day); 
} 

は、メソッドを実装して、あなたの活動/フラグメントを実装します。

@Override 
public void update(int year, int month, int day) { 
    String date = //format your date here; 
    this.editText.setText(date); 
} 

編集テキストにonClickListenerを追加すると...:

etOverFlowingStaringDate.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     DatePickerFragment fragment = new DatePickerFragment(); 
     fragment.setReceiver(MainActivity.this); //assuming your activity is called MainActivity.this. 'this' alone won't work. 
     fragment.show(this.getFragmentManager(), "datePicker"); //do getActivity().getFragmentManager in a Fragment 
    } 
}); 

気づいたかもしれない、私はfragment.setReceiver(MainActivity.this)と書いた。このメソッドは以下で作成され定義されます。

次のように続いて、あなたはDatePickerFragmentを実装することでconinue必要があります:private void updateDate(int,int,int)で更新を呼び出す

public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 
    private DateReceiver receiver; 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     int year = TransactionUtils.getFragment().mYearChosen; 
     int month = TransactionUtils.getFragment().mMonthChosen; 
     int day = TransactionUtils.getFragment().mDayChosen; 

     //If you want the minimum date to be today... 
     DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day); 
     datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 
     return datePickerDialog; 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     updateDate(year, monthOfYear, dayOfMonth); 
    } 

    public void setReceiver(DateReceiver receiver) { 
     this.receiver = receiver; 
    } 

    private void updateDate(int year, int monthOfYear, int dayOfMonth) { 
     if (receiver != null) //avoiding NullPointerExceptions :D 
       receiver.update(year, monthOfYear, dayOfMonth); 
    } 
} 

はあなたのEditTextの日付を変更します。

関連する問題