【Android】MaterialDatePicker使用方法筆記

MaterialDatePicker使用方法

背景

以前使用DatePicker進行程序開發。可是因爲本人平板是Nokia N1。系統永遠停在5.1版本上了,沒法使用DatePicker。因此必須想另外一個方案進行替換。此處使用MaterialDatePicker進行替換。此處嘗試MaterialDatePicker的時間段的選擇方法。java

Gradle環境配置

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

效果展現

image.png

相關文章
相關標籤/搜索