乐趣区

关于android:AndroidMaterialDatePicker使用方法笔记

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

成果展现

退出移动版