0

私はDatePickerDialog自分のアプリケーションで使用しています。フラグメントです。さて、問題は、ソファに座るとEditText、ダイアログが3回開くことです。ここでは 2 対2と 2対 2 の

合計 2DatePickerDialogを使用しています。私のコード:EditTextTimePickerDialogEditText

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

((EditText) etIOStartDate).setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub

        new DatePickerDialog(getActivity(), StartDate, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
    return false;
    }
});
}
DatePickerDialog.OnDateSetListener StartDate = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // TODO Auto-generated method stub

            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            String myFormat = "dd-MM-yyyy";
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat,
                    Locale.getDefault());

            ((EditText) etIOStartDate)
                    .setText(sdf.format(myCalendar.getTime()));
        }
    };

問題を解決するのを手伝ってください。

4

4 に答える 4

4

これを試して。アクション ダウンとアクション アップの 2 つのイベントがあります。

((EditText) etIOStartDate).setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            // TODO Auto-generated method stub
            switch(arg1.getAction())
            {
            case MotionEvent.ACTION_DOWN :
                new DatePickerDialog(getActivity(), StartDate, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                break;
            case MotionEvent.ACTION_UP  :
                break;

            }

            return true;
        }
    });
于 2014-04-16T04:59:30.980 に答える
1

日付ピッカーが開いているかどうかを確認するために、1 つのグローバル変数を維持する必要があります。datepicker を開くときに、その変数を true に割り当てます。

boolean isDatePickerOpened=false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

((EditText) etIOStartDate).setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub

if(!isDatePickerOpened){

   isDatePickerOpened=true;
        new DatePickerDialog(getActivity(), StartDate, myCalendar.get(Calendar.YEAR),       myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
    return false;
    }
});
}


DatePickerDialog.OnDateSetListener StartDate = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // TODO Auto-generated method stub

            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            String myFormat = "dd-MM-yyyy";
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat,
                    Locale.getDefault());

            ((EditText) etIOStartDate)
                    .setText(sdf.format(myCalendar.getTime()));

                isDatePickerOpened=false;

        }
    };

日付ピッカー ダイアログが閉じられたら、isDatePickerOpened を false に設定する必要があります。これはあなたを助けるかもしれません..

于 2014-04-16T05:00:58.740 に答える
1

OnClickListener を EditText に設定するだけです

setOnTouchListener を使用したため、2〜3回のタッチが検出されて開きます

于 2014-04-16T04:59:39.117 に答える
0

これを onCreate() の下で使用します

txtDate = (EditText) findViewById(R.id.etSdate);
txtDate.setOnClickListener(new View.OnClickListener() 
{
        @Override
        public void onClick(View v) 
        {
            etSdate();
        }

});

プログラムの最後でこの関数を呼び出します

public void etSdate()
   {
       {

            // Process to get Current Date
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);

            // Launch Date Picker Dialog
            DatePickerDialog dpd = new DatePickerDialog(this,
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                int monthOfYear, int dayOfMonth) {
                            // Display Selected date in textbox
                            txtDate.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);

                        }
                    }, mYear, mMonth, mDay);
            dpd.show();


  }
}
于 2014-04-16T05:05:45.893 に答える