在EditText中打开DatePicker,单击第一次单击时不显示

时间:2017-09-15 05:36:32

标签: java android datepicker android-edittext

我在点击DatePicker时努力打开EditText。它仅在第二次单击时打开日期选择器。我已经检查了以下选项但没有任何效果。我已经用XML给出了我的代码请建议我解决这个问题。几乎我都在努力。

<---XML content--->
<EditText
      android:id="@+id/p_date_edt"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"                                
      android:layout_marginBottom="@dimen/margin_10dp"
      android:ems="8"
      android:hint="@string/dateTime"
      android:focusableInTouchMode="false" />

我的java代码在这里:

pDateEdt = (EditText) view.findViewById(R.id.p_date_edt);
pDateEdt.setFocusable(false);
pDateEdt.setOnClickListener(this);
      ----

pDateEdt.setOnClickListener(new View.OnClickListener() {

       @Override
       public void onClick(View v) {
           datePicker();

       }
});

6 个答案:

答案 0 :(得分:3)

请使用C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\amd64\MSBuild.exe 代替setOnTouchListener。 请使用以下代码:

setOnClickListener

请删除这行代码:

pDateEdt.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:

                         datePicker();

                        break;
                }

                return false;
            }
        });

答案 1 :(得分:3)

尝试此操作可以单击edittext

<强> MainActivity.java

public class MainActivity extends AppCompatActivity {

    private DatePickerDialog mDatePickerDialog;
    private EditText edDate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edDate = (EditText) findViewById(R.id.activity_ed_date);

        setDateTimeField();
        edDate.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mDatePickerDialog.show();
                return false;
            }
        });
    }

    private void setDateTimeField() {

        Calendar newCalendar = Calendar.getInstance();
        mDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar newDate = Calendar.getInstance();
                newDate.set(year, monthOfYear, dayOfMonth);
                SimpleDateFormat sd = new SimpleDateFormat("dd-MM-yyyy");
                final Date startDate = newDate.getTime();
                String fdate = sd.format(startDate);

                edDate.setText(fdate);

            }
        }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
        mDatePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());

    }
}

<强> activity_main.xml中

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.demoapp.MainActivity">

    <EditText
        android:id="@+id/activity_ed_date"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:focusable="false"
        android:hint="Date"
        android:imeOptions="actionNext"
        android:maxLength="30" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/colorPrimary" />

</android.support.constraint.ConstraintLayout>

enter image description here

答案 2 :(得分:0)

print (df) value id 0 100 1 1 200 1 2 300 1 3 500 2 4 600 2 5 700 3 def f(x): return pd.DataFrame({'value1': np.append(x, 0), 'value2': np.append(0, x)}) df = df.groupby('id')['value'].apply(f).reset_index(level=1, drop=True).reset_index() print (df) id value1 value2 0 1 100 0 1 1 200 100 2 1 300 200 3 1 0 300 4 2 500 0 5 2 600 500 6 2 0 600 7 3 700 0 8 3 0 700 不听EditText,而是使用OnClickListener,它会有效。

OnTouchListener

或者,如果您想使用pDateEdt.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { datePicker(); return false; } }); ,请使用以下方法:

OnClickListener

答案 3 :(得分:0)

我看到很多程序员都在努力实现这一功能。 现在在您的场景中发生的事情是当您第一次触摸Edittext时,edittext将进入焦点模式,当您第二次触摸相同的edittext时,只会执行onClick中的方法,即datePicker()。 所以你应该做的就是删除android:focusableInTouchMode="false"标签 并且只需添加标记android:focusable="false"代替此标记 在你的java代码中只需执行以下操作

pDateEdt = (EditText) view.findViewById(R.id.p_date_edt);
pDateEdt.setOnClickListener(this);
@Override
public void onClick(View v) {
    datePicker();
}

我希望您的代码能够正常运行,并在第一次触摸时让日期选择器打开。

答案 4 :(得分:0)

使用日期选择器最简单的方法。只需添加两个变量

private DatePickerDialog datePickerDialog;
EditText etJoiningDate;

etJoiningDate=(EditText)findViewById(R.id.etJoiningDate);

    etJoiningDate.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:

                    final Calendar cldr = Calendar.getInstance();
                    int day = cldr.get(Calendar.DAY_OF_MONTH);
                    int month = cldr.get(Calendar.MONTH);
                    int year = cldr.get(Calendar.YEAR);
                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(TestActivity.this,
                            new DatePickerDialog.OnDateSetListener() {
                                @Override
                                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                    etJoiningDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
                                }
                            }, year, month, day);
                    datePickerDialog.show();

                    break;
            }


            return false;
        }


    });

答案 5 :(得分:0)

可能是解决此问题的最佳方式:

在布局文件中,为EditText设置这些属性

android:clickable="true"
android:longClickable="false"
android:focusable="false"