6

私はアンドロイドが初めてです。次のガイドを使用して、アンドロイドで日付ピッカーを作成しました。http://developer.android.com/guide/topics/ui/controls/pickers.html

 public  class DatePickerFragment extends DialogFragment
  implements DatePickerDialog.OnDateSetListener {



StringBuilder sb = new StringBuilder();
public static String date;
    @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);
   }

  public void onDateSet(DatePicker view, int year, int month, int day) {
   // Do something with the date chosen by the user


sb.append(year);
sb.append('-');
sb.append(month+1);
sb.append('-');
sb.append(day);

date = sb.toString();
System.out.println("The date is "+date);

    }

この日付値 (date = sb.toString()) を MainActivity に返す必要があります。onDateSet メソッドが無効なので、どうすればよいですか?

追加情報 - DatePickerDialog は MainActivity クラスでトリガーされますが、ボタン 1 回のクリックではトリガーされません。1 つのボタンの横にいくつかのプロセスが発生します。日付ピッカーは、特定の条件が満たされた場合にのみトリガーされます。日付の値も表示したくありません。さらなる処理のためにそれを返してほしいだけです。

あらゆる種類のガイダンスに感謝します

onDataset メソッドと justshow() を変更

public void onDateSet(DatePicker view, int year, int month, int day) {

// ユーザーが選択した日付で何かをする

    sb.append(year);
    sb.append('-');
    sb.append(month+1);
    sb.append('-');
    sb.append(day);

    date = sb.toString();
    MainActivity.newdate=sb.toString();
    System.out.println("The date is "+MainActivity.newdate);

} public void justShow(){

System.out.println("The date is "+MainActivity.newdate);

}

これはメインからの関連する部分です(最初の返信で提案された変更を行った後)

    DateToken mydate=new DateToken();
    String test=dayvals.get(0);
    DialogFragment df=new DatePickerFragment();

    if(test.equalsIgnoreCase("day")){


        df.show(getSupportFragmentManager(), "DatePik");

    }

    System.out.println("Date is on Main"+newdate);


  DatePickerFragment dpf=new DatePickerFragment();
  dpf.justShow();

newdate は静的 String ですが、それでも null を出力します。MainActivity と justShow メソッドの両方で。しかし、onDataSet メソッドでは日付が正しく出力されます

4

7 に答える 7

4
  • DatePickerFragment に public メソッドを作成して、文字列を返すことができます。
  • このクラスが書き込む MainActivity に静的変数を含めることができます。
  • SharedPreferences を使用して文字列を保存できます。

最初のオプションを使用します。アプリケーションが基本的な場合は、これが最も簡単です。

ご覧のとおり、これには複数の方法があるため、ユーザーがアプリをどのように操作するか、およびその日付がいつ必要になるかを確認することが重要です。MainActivity で Fragment への参照を保持していて、データをできるだけ早く必要としない場合は、public の return メソッドが便利です。ユーザーが日付を選択したらすぐに文字列を変更する必要がある場合は、静的変数が便利です。最後の方法は無駄が多く、あまりお勧めできませんが、静的な「魔法」は行われません。

于 2012-11-27T04:20:34.600 に答える
2

アクティビティにリスナー インターフェイスを実装し、それを DatePickerFragment に渡します。次に、リスナーのメソッドを呼び出してリスナーをトリガーします。ここで説明されています: http://developer.android.com/guide/topics/ui/dialogs.html#PassingEvents

于 2013-06-05T15:55:56.273 に答える
1

DatePickerDialogから日付を取得する方法は次のとおりです。

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    // onDateSet method
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        myday = dayOfMonth;
        mymonth = monthOfYear + 1;
        myyear = year;
        date = String.valueOf(myday) + getString(R.string.iphan) + String.valueOf(mymonth) + getString(R.string.iphan) + String.valueOf(myyear);

        Log.i(TAG,"Date: "+date);
    } 
}; // DatePickerDialog.OnDateSetListener close

@Override
protected Dialog onCreateDialog(int id) {

    switch (id) {
    case DATE_DIALOG_IDdob:
        // Current Calendar Date
    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);
    return new DatePickerDialog(this, mDateSetListener, year, month, day);
    }
    return null;
} // onCreateDialog() close
于 2012-11-27T05:54:02.060 に答える
0

DatePickerDialog クラスから拡張されたクラスでパブリック文字列変数を宣言し、選択した日付を onDataSet メソッド内のそのパブリック文字列変数に設定して、作成した DatePickerDialog のインスタンスを介して MainActivity からアクセスできるようにします。

于 2013-06-17T10:16:30.337 に答える
0

以下のコードを使用して、 onDateSet() メソッドで日付型の日付を返します

Date date = new Date(int year, int month, int day);
于 2012-11-27T04:49:03.680 に答える