【发布时间】:2015-07-25 06:07:49
【问题描述】:
我有一些时间的 Gridview,它们是从数据库中提取的。 Gridview 填充有 Textviews(显示时间),它们标记有必要的信息(ROW ID 等)以在数据库中更改该时间。我为 Gridview 设置了 OnItemClickListener,它将通过 DialogFragment 加载 TimePickerDialog。
// When items on the grid are pressed:
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
String type = (String) (v.getTag(R.id.VIEW_TAG_TIMEENTRY_TYPE));
String direction = (String) (v.getTag(R.id.VIEW_TAG_TIMEENTRY_DIRECTION));
long row_id = (long) v.getTag(R.id.VIEW_TAG_TIMEENTRY_ID);
// If entry doesn't exist
if (row_id < 0) {
DialogFragment dialogFragment = new TimePickerFragment();
// Tell the dialogFragment what to do when set......
dialogFragment.show(getSupportFragmentManager(), "timePicker");
}
}
});
TimePickerFragment 类如下:
public class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user
}
在我见过的大多数示例中,它们只是在 onTimeSet 函数中做一些简单的事情,比如更新特定的文本视图。但是我希望采取的操作是数据库添加或更新到与单击的文本视图相对应的行。
在 C++ 中,我可能已经将调用 ContentProvider 中的更新方法的函数作为参数传递给此类的构造函数,但我不知道 Java 的等效设计模式。
一个答案提到“接口”可能是要走的路,但我不确定如何实现这一点。 (Results from a DialogFragment to an ActivityFragment)
使用setTargetFragment方法提到的另一个答案,但是在这种情况下调用类是一个活动,所以我不能这样做。 (Receive result from DialogFragment)
我应该如何最好地解决这个设计要求?一段时间以来,我一直在破坏我的安卓应用新手大脑。
非常感谢
【问题讨论】:
标签: java android database gridview dialogfragment