【问题标题】:Using result from DialogFragment to update database via Gridview OnItemClickListener使用 DialogFragment 的结果通过 Gridview OnItemClickListener 更新数据库
【发布时间】: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


    【解决方案1】:

    你能试试这个吗...

    1 .在你的 TimePickerFragment 上..

    声明这个

    公共 TimeListener 监听器;

    public static abstract class TimeListener {
        public abstract void onTime(); // add parameters if you like
    }
    

    在你的 onTimeSet 上

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        if(listener!=null)
             listener.onTime();
    

    }

    1. 像这样实例化你的对话框片段

      TimePickerFragment tm = new TimePickerFragment();

      tm.listener = new TimePickerFragment.TimeListener(){

       @Override
       public void onTime(){
      
           //do something here
      
       }
      

      }

    【讨论】:

    • 好的,但是它说不要为DialogFragment声明一个非空的构造函数,我认为这与创建和销毁过程有关。它说要使用 setArguments 和 getArguments 函数,但 getArguments 函数没有 getInterface 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2023-03-17
    • 2013-03-27
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多