我在点击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();
}
});
答案 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>
答案 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"