我正在开发一个Android平板电脑应用程序,它有一些复杂的形式(布局有一个ListView和包含表单的布局,所以我必须给EditText充气)。我的想法是,如果我点击显示日期的TextView,DataPicker将显示在对话框中。
问题是未检测到点击。没有日志。
爪哇:
public static EditText datep;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.admissions_all);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
View inf = LayoutInflater.from(getApplicationContext()).inflate(R.layout.admissions, null);
datep = (EditText) inf.findViewById(R.id.date_value);
datep.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.i("Date", "You clicked me mate!");
showDatePickerDialog(v);
}
});
}
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getFragmentManager(), "datePicker");
Log.i("Date", "I want to show datePicker");
}
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@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) {
datep.setText(day + "." + month+ "." + year);
}
}
XML:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/general"
android:layout_alignRight="@id/general"
android:layout_below="@+id/general"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Data"
android:textAppearance="?android:attr/textAppearanceLarge" />
<View
android:id="@+id/line"
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/title"
android:background="#333333" />
<EditText
android:id="@+id/date_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/line"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/date_desc"
android:ems="9"
android:inputType="date" >
</EditText>
<TextView
android:id="@+id/date_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/date_value"
android:layout_alignBottom="@+id/date_value"
android:layout_alignParentLeft="true"
android:text="Date:"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
我遵循了这个:http://developer.android.com/guide/topics/ui/controls/pickers.html
答案 0 :(得分:0)
您需要将触摸模式中的date_value的焦点设置为false。您可以将android:focusableInTouchMode="false"
添加到xml或使用datep.setFocusableInTouchMode(false);
添加到代码中。然后,这应该点击您的点击事件。 (在模拟器上测试)
另请参阅:How to do something after user clicks on my EditText
参考:http://android-developers.blogspot.com/2008/12/touch-mode.html
答案 1 :(得分:0)
我没有看到任何dateup.setclickable(true);
,尝试添加此内容。也许这就是为什么它不起作用,你也可以调试它,看看它是否调用了onlciklistner
我看到你写了这样的东西。
datep = (EditText) inf.findViewById(R.id.date_value);
当你有这个
setContentView(R.layout.admissions_all);
这意味着您editText
位于另一个活动中,但您将onclickListner
设置为另一个活动,因此无效。在活动中初始化他的onlcikListner
,该内容视图是inf.xml。如果所有这些都无济于事,请添加更多部分代码
关心Hayk Nahapetyan
答案 2 :(得分:0)
您可以将DatePickerFragment更改为DatePickerDialog。然后做一个DatePickerDialog.show(); 类似的东西:
DatePickerDialog datePickerDialog = null;
datep.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.i("Date", "You clicked me mate!");
showDatePickerDialog();
}
});
private void showDatePickerDialog() {
datePickerDialog = new DatePickerDialog(context, new DateSetListener(), year, month, day);
datePickerDialog.show();
}