当前位置: 首页 > 知识库问答 >
问题:

是否使用FragmentDialog创建TimePickerDialog?

燕刚捷
2023-03-14

我想使用FragmentDialog创建一个TimePickerDialog并在我的片段和TimePickerDialog之间交换数据。我已经创建了DatePickerDialog,但不知道如何创建TimePickerDialog。我希望当用户单击我的片段中的按钮时,TimePickerDialog出现。这是创建DatePickerDialog的方式:

导入java.util.Calendar;导入java.util.Date;导入java.util.GregorianCalendar;

Date mDate;

public static DatePickerFragment newInstance(Date date) {
    Bundle args = new Bundle();
    args.putSerializable(EXTRA_DATE, date);

    DatePickerFragment fragment = new DatePickerFragment();
    fragment.setArguments(args);

    return fragment;
}

private void sendResult(int resultCode) {
    if (getTargetFragment() == null) 
        return;

    Intent i = new Intent();
    i.putExtra(EXTRA_DATE, mDate);

    getTargetFragment()
        .onActivityResult(getTargetRequestCode(), resultCode, i);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    mDate = (Date)getArguments().getSerializable(EXTRA_DATE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(mDate);
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);

    View v = getActivity().getLayoutInflater()
        .inflate(R.layout.dialog_date, null);

    DatePicker datePicker = (DatePicker)v.findViewById(R.id.dialog_date_datePicker);
    datePicker.init(year, month, day, new OnDateChangedListener() {
        public void onDateChanged(DatePicker view, int year, int month, int day) {
            mDate = new GregorianCalendar(year, month, day).getTime();

            // update argument to preserve selected value on rotation
            getArguments().putSerializable(EXTRA_DATE, mDate);
        }
    });

    return new AlertDialog.Builder(getActivity())
        .setView(v)
        .setTitle(R.string.date_picker_title)
        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                sendResult(Activity.RESULT_OK);
            }
        })
        .create();
} }

克里米亚片段

导入java.util.Date;导入java.util.uuid;

导入android.app.activity;导入Android.Content.Intent;导入Android.os.bundle;导入android.support.v4.app.fragment;导入android.support.v4.app.FragmentManager;导入Android.Text.Editable;导入Android.Text.TextWatcher;导入Android.View.LayoutInflater;导入Android.view.view;导入Android.View.ViewGroup;导入android.webkit.webview.findListener;导入Android.Widget.Button;导入android.widget.checkbox;导入Android.Widget.CompoundButton;导入Android.Widget.CompoundButton.OnCheckedChangeListener;导入Android.Widget.EditText;

private static final String DIALOG_DATE = "date";
private static final int REQUEST_DATE = 0;

Crime mCrime;
EditText mTitleField;
Button mDateButton;
CheckBox mSolvedCheckBox;
Button mTime;
String time;
public static CrimeFragment newInstance(UUID crimeId) {
    Bundle args = new Bundle();
    args.putSerializable(EXTRA_CRIME_ID, crimeId);

    CrimeFragment fragment = new CrimeFragment();
    fragment.setArguments(args);

    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    UUID crimeId = (UUID)getArguments().getSerializable(EXTRA_CRIME_ID);
    mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);
}

public void updateDate() {
    mDateButton.setText(mCrime.getDate().toString());
}
  public void updateTime() {

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_crime, parent, false);

    mTitleField = (EditText)v.findViewById(R.id.crime_title);
    mTitleField.setText(mCrime.getTitle());
    mTitleField.addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence c, int start, int before, int count) {
            mCrime.setTitle(c.toString());
        }

        public void beforeTextChanged(CharSequence c, int start, int count, int after) {
            // this space intentionally left blank
        }

        public void afterTextChanged(Editable c) {
            // this one too
        }
    });

    mDateButton = (Button)v.findViewById(R.id.crime_date);
    updateDate();
    mDateButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {                                 
            FragmentManager fm = getActivity()
                    .getSupportFragmentManager();
            DatePickerFragment dialog = DatePickerFragment
                .newInstance(mCrime.getDate());
            dialog.setTargetFragment(CrimeFragment.this, REQUEST_DATE);
            dialog.show(fm, DIALOG_DATE);                 
        }
    });
    mTime = (Button) v.findViewById(R.id.crime_time);

    mSolvedCheckBox = (CheckBox)v.findViewById(R.id.crime_solved);
    mSolvedCheckBox.setChecked(mCrime.isSolved());
    mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // set the crime's solved property
            mCrime.setSolved(isChecked);
        }
    });



    return v;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != Activity.RESULT_OK) return;
    if (requestCode == REQUEST_DATE) {
        Date date = (Date)data.getSerializableExtra(DatePickerFragment.EXTRA_DATE);
    }
} }

现在我要创建一个TimePickerDialog。

共有1个答案

邹铭
2023-03-14
public class DialogFragmentTimePicker extends DialogFragment implements OnTimeSetListener {

public static final String ARG_HOUR = "hour";

public static final String ARG_MINUTE = "minute";

private OnTimeSetListener mListener;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current time as the default values for the picker
    int hour, minute;
    if (getArguments() != null) {
        hour = getArguments().getInt(ARG_HOUR);
        minute = getArguments().getInt(ARG_MINUTE);
    } else {
        final Calendar c = Calendar.getInstance();
        hour = c.get(Calendar.HOUR_OF_DAY);
        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 setOnTimeSetListener(OnTimeSetListener listener) {

    mListener = listener;
}

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

    if (mListener != null) {
        mListener.onTimeSet(view, hourOfDay, minute);
    }
}

}

 类似资料:
  • 给定的类值: 我正在尝试使用创建该类的一个新实例: 如果是,我如何使用创建一个新的值对象,在这里我调用的? 谢谢

  • 我是TPL的新手,我想知道:C#5.0新增的异步编程支持(通过新的异步和等待关键字)与线程的创建有什么关系? 具体来说,每次使用异步/等待是否都会创建一个新线程?如果有许多嵌套方法使用异步/等待,那么是否为这些方法中的每一个都创建了一个新线程?

  • 问题内容: 你用代替吗? 我的意思是作为返回值或设置String变量的值。我不是要进行比较,因为我们在那里使用 问题答案: 当然不是。您是否真的认为“”不够清晰? 常量本质上有3个用例: 记录值的含义(常量名+ javadoc) 根据通用值同步客户端。 提供一个特殊值的捷径,以避免一些启动费用 在此均不适用。

  • 假设AWS堆栈是使用CloudFormation创建的。现在,其中一种资源在云层形成之外进行了修改。 1) 有没有可能让CloudFormation专门创建这些资源?根据我的理解,我们不能这样做,因为CloudFormation不能识别差异,因此不能创建修改后的资源。我的观察正确吗? 2) 此外,如果在CloudFormation之外进行了修改,我需要哪些选项才能将堆栈恢复到其原始状态?

  • 我有一个DBA创建的表。我想为每个表提供实体类以供进一步查询。有人能建议如何使用eclipse自动创建实体类吗?

  • 问题内容: 我的教授和这个家伙都声称创造了价值清单。 “注意:范围函数仅返回包含从x到y-1的数字的列表。例如,range(5,10)返回列表[5、6、7、8、9]。” 我认为这是不准确的,因为: 此外,访问由创建的整数的唯一显而易见的方法是遍历它们,这使我认为标记为列表是不正确的。 问题答案: 在Python 2.x中,返回一个列表,但在Python 3.x中,返回一个不可变序列,类型为。 Py