设为首页 加入收藏

TOP

android选择时间攻略(三)
2017-10-13 10:35:58 】 浏览:2239
Tags:android 选择 时间 攻略
rap_content" android:layout_height="wrap_content" /> </RelativeLayout>
  • Activity文件:
//实现DataCallBack接口,实现与Fragment的通信
public class TestActivityActivity extends AppCompatActivity implements DataCallBack{

    TextView timeText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test2);
        timeText = (TextView) findViewById(R.id.time_text);
        //为timeText设置点击事件
        timeText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //实例化对象
                DatePickerFragment datePickerFragment = new DatePickerFragment();
                //调用show方法弹出对话框
                // 第一个参数为FragmentManager对象
                // 第二个为调用该方法的fragment的标签
                datePickerFragment.show(getFragmentManager(), "date_picker");
            }
        });
    }


    //实现DataCallBack的getData方法
    @Override
    public void getData(String data) {
        //data即为fragment调用该函数传回的日期时间
        timeText.setText(data);
    }
}

由于TimePickerFragment对话框是在DatePickerFragment类里面启动的,所以这样写只能日期和时间都选择,如果要单独选择日期或者时间,只需要重写onTimeSet()或者onDateSet()方法即可

兼容性问题

不同的android版本显示的效果不同,在android6.0效果很好,不过在一些低版本android(如4.0,笔者没有每个版本都测试)会出现调用两次回掉函数的情况,导致选择两次时间。解决的办法有很多,只要保证回调函数里面的逻辑只执行一次就可以。这里提供一种比较通用的方法。

重写TimePickerDialog和DatePickerDialog的onStop()方法

  • 直接在Activity中使用的重写方法
final TimePickerDialog timePickerDialog = new TimePickerDialog(TestActivity.this, new TimePickerDialog.OnTimeSetListener() {
            //选择完时间后会调用该回调函数
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                time.append(" "  + hourOfDay + ":" + minute);
                //设置TextView显示最终选择的时间
                timeText.setText(time);
            }
        }, hour, minute, true){
          // 重写onStop()
            @Override
            protected void onStop() {

            }
        };
        //实例化DatePickerDialog对象
        DatePickerDialog datePickerDialog = new DatePickerDialog(TestActivity.this, new DatePickerDialog.OnDateSetListener() {
            //选择完日期后会调用该回调函数
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                //因为monthOfYear会比实际月份少一月所以这边要加1
                time.append(year + "-" + (monthOfYear+1) + "-" + dayOfMonth);
                //选择完日期后弹出选择时间对话框
                timePickerDialog.show();
            }
        }, year, month, day){
           //重写onstop
            @Override
            protected void onStop() {
            }
        };

上面的写法看起来会比较乱,也可以另外新建一个类继承TimePickerDialog或者DatePickerDialog然后重写onStop()方法

  • 通过FragmentDialog使用的重写方式

只需在onCreateDialog()方法里面重写即可,下面的代码会比较清晰

return new DatePickerDialog(getActivity(), this, year, month, day){
           // 重写onStop
            @Override
            protected void onStop() {
            }
        };
 return new TimePickerDialog(getActivity(), this, hour, minute, true){
            //重写onStop
            @Override
            protected void onStop() {
            }
        };

博主水平有限,但是保证以上代码都是亲手实现过一遍的。如果有什么不足之处欢迎大家指出^_^。

参考

android学习笔记(十二)日期、时间组件

详细解读DialogFragment

解决TimePickerDialog中onTimeSet执行两次的问题

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android-正方形的容器 下一篇Android进度条学习

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目