2017-03-07 18 views
0

こんにちは、それぞれのクラスから日付と時刻の値を取得し、それらをフラグメントのテキストビューに設定しようとしています。 アイブ氏は、変数に設定し、メソッドから呼び出すしようとしたが、ここでフラグメント内のDialogFragmentから日付と時刻の値を取得するAndroid

フラグメントのクラスで私のコードがあるが動作するようには思えないと私はtextviewsのset_dateとSET_TIME

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_edit_timetable, container, false); 

    selectDate = (Button) view.findViewById(R.id.selectDate); 
    selectTime = (Button) view.findViewById(R.id.selectTime); 
    set_date = (TextView) view.findViewById(R.id.set_date); 
    set_time = (TextView) view.findViewById(R.id.set_time); 
    selectDate.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // Show Date dialog 
      DialogFragment newFragment = new SelectDateFragment(); 
      newFragment.show(getActivity().getFragmentManager(), "Date Picker"); 

     } 
    }); 
    selectTime.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // Show time dialog 
      DialogFragment newFragment = new SelectTimeFragment(); 
      //newFragment.show(getActivity().getFragmentManager(), DIALOG_TIME); 
      newFragment.show(getActivity().getFragmentManager(), "Time Picker"); 
     } 
    }); 

    return view; 
} 
を設定したいです

SelectDateFragmentクラス

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

private String date = ""; 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Calendar calendar = Calendar.getInstance(); 
    int yy = calendar.get(Calendar.YEAR); 
    int mm = calendar.get(Calendar.MONTH); 
    int dd = calendar.get(Calendar.DAY_OF_MONTH); 
    return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
} 

@Override 
public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
    populateSetDate(yy, mm+1, dd); 
} 
public void populateSetDate(int year, int month, int day) { 
    date = month+"/"+day+"/"+year; 
} 

public String getDate() { 
    return date; 
} 

SelectTimeFragmentクラス

public class SelectTimeFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 

private String time = ""; 
public SelectTimeFragment() { 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the current time as the default values for the picker 

    final Calendar calendar = Calendar.getInstance(); 
    int hour = calendar.get(Calendar.HOUR_OF_DAY); 
    int minute = calendar.get(Calendar.MINUTE); 

    // Create a new instance of TimePickerDialog and return it 
    return new TimePickerDialog(getActivity(), this, hour, minute, 
      DateFormat.is24HourFormat(getActivity())); 
} 

@Override 
public void onTimeSet(TimePicker view, int hour, int minute) { 
    time = String.valueOf(hour) + ":" + String.valueOf(minute); 

} 

public String getTime() { 
    return time; 
} 
+0

なぜフラグメントダイアログを使用しますか? DatePickerDialogで十分です。ボタンのonClickで作成して表示する必要があります。 –

+0

日付フィールドだけに注目すると、あなたは 'onDateSet()'で期待する値を得ていることを確認しましたか? – Cheticamp

答えて

0

[日付/時刻]選択部分にこのメソッドを追加します。

private void sendResult(int resultCode, Date mDate) { 
    if (getTargetFragment() == null) 
     return; 
    Intent i = new Intent(); 
    i.putExtra("EXTRA_DATE", mDate); 
    getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, i); 
} 

selectDate.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     DialogFragment newFragment = new SelectDateFragment(); 
     newFragment.setTargetFragment(TIMETABLE_FRAGMENT, REQUEST_DATE); // add this 
     newFragment.show(getActivity().getFragmentManager(), "Date Picker"); 

    } 
}); 

は最終的にあなたのTIMETABLE_FRAGMENTにこのメソッドを追加

public void populateSetDate(int year, int month, int day) { 
    date = month+"/"+day+"/"+year; 
    sendResult(Activity.RESULT_OK, date); //add this 
} 

がdialogFragmentインスタンスの下に次の行を追加するには、populateSetDate()でこの行を追加します

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode != Activity.RESULT_OK) 
     return; 

    if (requestCode ==REQUEST_DATE) { 
     date = (Date) data.getSerializableExtra("EXTRA_DATE"); // this your selected date 
    } 
} 
+0

Imは2つのエラーを取得していますが、シンボルタイムテーブルのシンボルREQUEST_DATEとCommonFunctoinsを見つけることができません。 – Ahmad

+0

Request_dateはユニークなコードです。例えば; REQUEST_DATE = 1234、REQUEST_TIME = 5678。あなたはあなたのonActivtyResult()にそれらを必要とします。申し訳ありませんCommonFunctions :)これは私の汎用関数クラスです。 – Kaloglu

+0

この行は次のように設定する必要があります。newFragment.setTargetFragment(newFragment、1234);または、 'newFragment'をtimeetable_fragment – Ahmad

0

AssumあなたはonDateSetに期待するデータを取得していることをINGのは、以下を試してください。

SelectDateFragmentからimplementsを削除し、onDateSetを削除します。 DatePickerDialogに電話する方法を変更してください。

public class SelectDateFragment extends DialogFragment { 

private String date = ""; 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Calendar calendar = Calendar.getInstance(); 
    int yy = calendar.get(Calendar.YEAR); 
    int mm = calendar.get(Calendar.MONTH); 
    int dd = calendar.get(Calendar.DAY_OF_MONTH); 

    return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener) getParentFragment(), yy, mm, dd); 
} 

public void populateSetDate(int year, int month, int day) { 
    date = month+"/"+day+"/"+year; 
} 

public String getDate() { 
    return date; 
} 

最上位フラグメントにimplementsを追加します。これは、日付と時刻を設定する場所です。また、ここでonDateSetに追加します。

Public class YourTopFragment extends Fragment implements DatePickerDialog.OnDateSetListener 

... 

@Override 
public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
    set_date.setText(...the text you want to set goes here...); 
} 

これは、選択した日付の直接あなたのトップレベルのフラグメントを知らせるためにDialogFragmentを指示します。

時間を設定するのに似たようなものが必要です。

+0

(https://i.gyazo.com/fd420f4c057ceb2ae03c1fdac8ae53f9 [イムは、私は日付を取得しますフラグメントに実装されていても、このエラーを取得] 。png) – Ahmad

+0

そこに型が必要です。更新されたコードをご覧ください。 – Cheticamp

+0

日付が設定されているときに、onDateSetメソッドのdosentが実行されているように見えますが、修正済みです。 – Ahmad

関連する問題