1

我在同一个活动中使用两个时间选择器来让用户为特定任务选择开始时间和停止时间,我使用支持库中提供的 DialogFragment 类来向后兼容旧的 Android 版本。

我设置了时间选择器并且它们正确显示,但我无法弄清楚如何获取用户为这两个时间选择器输入的值,我没有任何实现对话框的背景或经验,所以你的代码指导高度赞赏示例!

这是我创建 TimePickerFragment 类的代码,在一个单独的文件中创建,从以下位置获取和编辑: http: //developer.android.com/guide/topics/ui/controls/pickers.html

package com.calls.only;

import java.util.Calendar;

import android.app.Dialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;

public class TimePickerFragment extends DialogFragment {

    @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);

        if (!(getActivity() instanceof OnTimeSetListener)) throw new IllegalStateException("Activity should implement OnTimeSetListener!");
            OnTimeSetListener timeSetListener =  (OnTimeSetListener) getActivity();

        // Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), timeSetListener, hour, minute, false);
    }
}

在我的 MainActivity 中:

package com.calls.only;
import java.util.Calendar;
import java.util.TimeZone;
import android.os.Bundle;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.DialogFragment;
import android.view.Menu;
import android.view.View;
import android.widget.RadioButton;
import android.widget.TextView;

public class MainActivity extends FragmentActivity implements TimePickerDialog.OnTimeSetListener {

    public void InputStartTime(View v) {
        DialogFragment newFragment = new TimePickerFragment();
        newFragment.show(getSupportFragmentManager(), "timePicker");
    }

    public void InputEndTime(View v) {
        DialogFragment newFragment = new TimePickerFragment();
        newFragment.show(getSupportFragmentManager(), "timePicker");
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Log.i("TimePicker", "Time picker set!");
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

关于如何实现两个时间选择器并通过在上面的代码中添加一些东西来区分它们的输入的任何想法?

4

3 回答 3

1

我刚刚实施了一个类似的项目。我使用了一个内部 DialogFragment 来显示 DatePickerDialog 和一个标志来检测单击了哪个 EditText。您可以在我的 github
上获取示例

MainActivity.java

public class MainActivity extends ActionBarActivity implements View.OnClickListener {
private EditText mStartTime;
private EditText mEndTime;

private DatePickerDialogFragment mDatePickerDialogFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mStartTime = (EditText) findViewById(R.id.start_date);
    mEndTime = (EditText) findViewById(R.id.end_date);
    mDatePickerDialogFragment = new DatePickerDialogFragment();

    mStartTime.setOnClickListener(this);
    mEndTime.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    int id = v.getId();
    if (id == R.id.start_date) {
        mDatePickerDialogFragment.setFlag(DatePickerDialogFragment.FLAG_START_DATE);
        mDatePickerDialogFragment.show(getSupportFragmentManager(), "datePicker");
    } else if (id == R.id.end_date) {
        mDatePickerDialogFragment.setFlag(DatePickerDialogFragment.FLAG_END_DATE);
        mDatePickerDialogFragment.show(getSupportFragmentManager(), "datePicker");
    }
}

public class DatePickerDialogFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {
    public static final int FLAG_START_DATE = 0;
    public static final int FLAG_END_DATE = 1;

    private int flag = 0;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void setFlag(int i) {
        flag = i;
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, monthOfYear, dayOfMonth);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        if (flag == FLAG_START_DATE) {
            mStartTime.setText(format.format(calendar.getTime()));
        } else if (flag == FLAG_END_DATE) {
            mEndTime.setText(format.format(calendar.getTime()));
        }
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.edinstudio.app.samples.datepicker.MainActivity">

<EditText
    android:id="@+id/start_date"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:hint="Please pick a date" />

<EditText
    android:id="@+id/end_date"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/start_date"
    android:focusable="false"
    android:hint="Please pick a date" />
</RelativeLayout>
于 2014-03-14T11:42:04.700 回答
0

与其TimePickerDialog.OnTimeSetListener在 Activity 中实现,不如将其提供给构造函数中的片段。这样每个实例都可以做不同的事情。

所以你会像这样使用它:

  frag1 = new TimePickerFragment(new TimePickerDialog.OnTimeSetListener() { /* Your implementation*/ });
于 2013-04-10T19:30:25.860 回答
0

使用时间选择器显示editText的onClick()对话框的活动

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if ((v.getId() == R.id.edtTime)) {

        final Dialog dialog = new Dialog(AddTimeActivity.this);
        dialog.setContentView(R.layout.add_time_dialog);
        Button mSave = (Button) dialog.findViewById(R.id.btnSave);
        mSave.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                TimePicker timePicker = (TimePicker) dialog
                        .findViewById(R.id.timePicker1);
                timePicker.clearFocus();
                hourSelect = timePicker.getCurrentHour();
                minuteSelect = timePicker.getCurrentMinute();

                if (hourSelect == 0) {
                    tt = "AM";
                    hourSelect = 12;
                } else if (hourSelect > 0 && hourSelect < 12) {
                    tt = "AM";
                } else if (hourSelect == 12) {
                    tt = "PM";
                } else {
                    tt = "PM";
                    hourSelect = hourSelect - 12;
                }
                timeSelect = hourSelect;
                edtTime.setText(new         StringBuilder().append(timeSelect)
                          .append(":").append(pad(minuteSelect)).append(tt));
                dialog.dismiss();

            }
        });
        dialog.show();
    }

add_time_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Select Time" />

<TimePicker
    android:id="@+id/timePicker1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

<Button
    android:id="@+id/btnSave"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    android:text=" Save " />

</LinearLayout>
于 2013-04-10T19:36:25.437 回答