MaterialDatePicker使用方法

背景

之前使用DatePicker进行程序开发。但是由于本人平板是Nokia N1。系统永远停在5.1版本上了,无法使用DatePicker。所以必须想另一个方案进行替换。此处使用MaterialDatePicker进行替换。此处尝试MaterialDatePicker的时间段的选择方法。

Gradle环境配置

app对应的gradle文件,注意Material的版本。
官网的说明是针对1.3.0版本的。但是创建工程的时候,默认提供的版本是1.2。导致很多接口编译不过。

dependencies {
    ....
    implementation 'com.google.android.material:material:1.3.0'
    ....
}

画面实现代码


import com.chad.library.adapter.base.BaseQuickAdapter;
import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener;

import java.util.ArrayList;
import java.util.Calendar;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    // 解析ARoute提供的参数
    ARouter.getInstance().inject(this);

    if (mTransFromPath == "") {
        Log.e(TAG, "ARouter parameter[transFromPath] is unrecognized");
    }

    // 创造假数据
    dummyData();

    // 获得RecycleView的对象
    RecyclerView list = findViewById(R.id.home_things_list);

    // 设定LayoutManager
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    list.setLayoutManager(layoutManager);

    // 设定Layout,数据来源
    HomeThingsListAdapter adapter = new HomeThingsListAdapter(this, R.layout.things_list_item, mThings);

    // 设定List的点击事件
    adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {

        @Override
        public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
            Log.i(TAG, "Fridge things list item has been clicked. view:" + view.getId() + " position:" + position);
            
            // 筛选Date的View点击事件
            if (view.getId() == R.id.things_list_date_range) {
                FridgeThings item = mThings.get(position);
                Calendar fromCal = item.getStartDate();
                Calendar toCal = item.getEndDate();
                
                // 使用MaterialDatePicker进行时间的选择。此处尝试时间段选择方案。所以用的是dateRangePicker。
                MaterialDatePicker dialog = MaterialDatePicker.Builder.dateRangePicker()
                            .setSelection(new Pair(fromCal.getTimeInMillis(), toCal.getTimeInMillis()))
                            .build();

                // 添加事件监听
                dialog.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
                    @Override
                    public void onPositiveButtonClick(Object selection) {
                        Log.i(TAG, "selection:" + selection);

                        // 获得用户的选择结果,设定到item中
                        Pair result = (Pair)selection;
                        fromCal.setTimeInMillis((long)result.first);
                        item.setStartDate(fromCal);
                        toCal.setTimeInMillis((long)result.second);
                        item.setEndDate(toCal);

                        // 通知List的Adapter,数据已经发生了变更。
                        adapter.notifyItemChanged(position);
                    }
                });
                
                // 显示时间选择框
                dialog.show(getSupportFragmentManager(), "DatePicker");
            };
        }
    });

    // 绑定adapter
    list.setAdapter(adapter);
}

效果展示

image.png


GiraKoo
0 声望0 粉丝

Practice makes perfect.