我正在尝试动态创建日期选择器(我不知道确切的数字)。
我指的是这个教程http://javapapers.com/android/android-datepicker/。
在我的代码中,我按以下方式创建日期选择器: -
TableRow row = new TableRow(this);
row.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
edit = new EditText(this);
edit.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
edit.setHint("Tap to select "+input_desc[index]);
edit.setFocusable(false);
edit.setClickable(true);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DialogFragment newFragment = new SelectDateFragment();
newFragment.show(getSupportFragmentManager(), "DatePicker");
}
});
allElement_date.add(edit);
row.addView(edit);
table.addView(row);
以上代码被称为未知次数。然后我有以下代码: -
@SuppressLint("ValidFragment")
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int yy = calendar.get(Calendar.YEAR);
int mm = calendar.get(Calendar.MONTH);
int dd = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}
public void onDateSet(DatePicker view, int yy, int mm, int dd) {
populateSetDate(yy, mm+1, dd);
}
}
然而,正如您所看到的那样,无法区分editText上的不同点击以区别对象进行设置。
public void populateSetDate(int year, int month, int day)
{
}
有人可以帮我找出如何找出已点击的编辑文本并单独设置。
提前致谢。
答案 0 :(得分:0)
首先初始化TableLayout并在此布局中添加tableRow,TableRow不直接添加。
答案 1 :(得分:0)
使用以下构造函数扩展您的SelectDateFragment
类,并保留对EditText
字段的引用:
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private EditText edit
public SelectDateFragment(EditText edit) {
this.edit = edit;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int yy = calendar.get(Calendar.YEAR);
int mm = calendar.get(Calendar.MONTH);
int dd = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}
public void onDateSet(DatePicker view, int yy, int mm, int dd) {
populateSetDate(edit, yy, mm+1, dd);
}
}
在populateSetDate
方法中:
public void populateSetDate(EditText edit, int year, int month, int day)
{
edit.setText( day + "." + month + "." + year);
}
因此,当您创建EditText
字段及其onClick
事件时,您可以传递该字段:
TableRow row = new TableRow(this);
row.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
edit = new EditText(this);
edit.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
edit.setHint("Tap to select "+input_desc[index]);
edit.setFocusable(false);
edit.setClickable(true);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DialogFragment newFragment = new SelectDateFragment(edit);
newFragment.show(getSupportFragmentManager(), "DatePicker");
}
});
allElement_date.add(edit);
row.addView(edit);
table.addView(row);
当然,在调用setText()
时,您可以使用更精细的日期格式,而不是仅仅使用“+”字符串连接来构建它。也许你不想分别传递年,月和日期的值,但这只是化妆品而不是你最初问题的一部分。