2

私のXMlレイアウトは次のようになります。

<RelativeLayout  android:id="@+id/dateSelectionLayout"  android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="vertical" android:visibility="visible">

            <EditText android:layout_height="wrap_content" android:layout_width="fill_parent" 
                android:singleLine="true" android:id="@+id/dateSelectionEditText" android:gravity="center"
                android:textColor="#000000" android:textSize="14sp" android:cursorVisible="false"
                android:focusable="false"
                android:hint="tax code" android:layout_weight="1"/>

            <DatePicker android:id="@+id/datePicker"
                android:layout_width="fill_parent" android:layout_height="wrap_content"
                android:layout_weight="1" android:layout_below="@+id/dateSelectionEditText"/>

    </RelativeLayout>

ここで、datePickerの日付に基づくeditTextの値を変更したいと思います。ユーザーが日付を変更した場合、その時点でeditTextに反映される必要があります。どのようにそれは可能ですか?

編集:私は次のように行いました:resourcecを次のように設定しました:

datePicker = (DatePicker) findViewById(R.id.datePicker);
        dateSelectionEditText = (EditText)findViewById(R.id.dateSelectionEditText);

そして、次のようにオーバーライドメソッドを設定しました。

@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
    dateSelectionEditText.setText(dayOfMonth+"/"+monthOfYear+"/"+year);

}

しかし、日付ピッカーの値の変更については、まだ値を取得していません。

編集:

Kasper Moerchの答えの後、私は解決策を得ました。しかし、ほとんど問題はありません。私はこのコードを使用して日付ピッカーを初期化します。

final Calendar c = Calendar.getInstance();  
        //dateSelectionEditText.setText( "" + dayOfMonth + "-" + monthOfYear + "-" + year );
        datePicker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new MyOnDateChangedListener());
        Toast.makeText(getApplicationContext(), ""+position+"", Toast.LENGTH_SHORT).show();

これで、datePickerから変更された値を確認できます。ただし、最初の月(1月から)は「1」ではなく0になります。では、なぜそれがこのように起こるのでしょうか?

ありがとう。

4

5 に答える 5

3

あなたがする必要があるのは、EditTextとへの参照を取得することですDatePicker

EditText editText = (EditText) findViewById( R.id.dateSelectionEditText );
DatePicker datePicker = (DatePicker) findViewById( R.id.datePicker );

OnDateChangedListener次に、 :を作成する必要があります。

private class MyOnDateChangedListener implements OnDateChangedListener {
  @Override
  public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
     editText.setText( "" + dayOfMonth + "-" + (monthOfYear + 1) + "-" + year );
  }
};

あとは、DatePickerを初期化するだけです。

datePicker.init( year, monthOfYear, dayOfMonth, new MyOnDateChangedListener() ).
于 2011-12-15T12:16:15.483 に答える
1

これをチェックしてください日付ピックチュートリアル

これを実装するための最良の方法を示しています。次に、好みに合わせて変更できます。

于 2011-12-15T12:03:41.263 に答える
1

これらの変数をアクティビティでグローバルに初期化します。

private EditText zopenDate;
        Button calendar;

        private int mYear;
        private int mMonth;
        private int mDay;
        private DatePickerDialog.OnDateSetListener mDateSetListener;

インスタンス内

calendar=(Button)findViewById(R.id.datePicker);
zopenDate=(EditText)findViewById(R.id.dateSelectionEditText);

インスタンス内でこのリスナーを使用し、

mDateSetListener =
            new DatePickerDialog.OnDateSetListener() {

                public void onDateSet(DatePicker view, int year, 
                                      int monthOfYear, int dayOfMonth) {
                    mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updateDisplay();
                }
            };



calendar.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    showDialog(DATE_DIALOG_ID);
                }
            });




final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);

            // display the current date (this method is below)
            updateDisplay();

createInstance()の外部の関数updatedisplay()、

private void updateDisplay() {
        zopenDate.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mMonth + 1).append("-")
                    .append(mDay).append("-")
                    .append(mYear).append(" "));
    }
于 2011-12-15T12:07:11.983 に答える
1

このように設定

public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

        selectedDate = Integer.toString(mMonth)+"/"+Integer.toString(mDay)+"/"+Integer.toString(mYear);
        date_text.setText(selectedDate);
        System.out.println("selected date is:"+selectedDate);
        edittext.setText(selectedDate );
    }
};
于 2011-12-15T12:25:45.153 に答える
0

これを使用して、編集テキストに日付を反映します

private OnDateSetListener setDOB = new OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year, int month,
                    int dayOfMonth) {
                datePicker = (EditText) findViewById(R.id.dateOB);
                datePicker.setText(" " + dayOfMonth + "/" + (month + 1) + "/"
                        + year + "");

            }
        };
于 2011-12-15T12:10:47.107 に答える