【Android】MaterialDatePicker使用笔记

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

posted on 2021-04-20 14:18  GiKoo  阅读(702)  评论(0)    收藏  举报

导航