以前使用DatePicker進行程序開發。可是因爲本人平板是Nokia N1。系統永遠停在5.1版本上了,沒法使用DatePicker。因此必須想另外一個方案進行替換。此處使用MaterialDatePicker進行替換。此處嘗試MaterialDatePicker的時間段的選擇方法。java
app對應的gradle文件,注意Material的版本。
官網的說明是針對1.3.0版本的。可是建立工程的時候,默認提供的版本是1.2。致使不少接口編譯不過。android
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); }