Android material AutoCompleteTextView 上的微调器 NullPointerException

Android material spinner NullPointerException on AutoCompleteTextView

旋转屏幕时出现 android spinner NullPointerException

嗨!伙计们,我在旋转屏幕时遇到了旋转器抛出 nullPointerExpression 的问题

<com.weiwangcn.betterspinner.library.material.MaterialBetterSpinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/department_spinner"
            android:hint="@string/select_department"
            android:gravity="center"
            android:drawableEnd="@drawable/spinner_icon"
            android:textColorHighlight="@color/colorButton"
            android:textColor="@color/colorButton"
            android:theme="@style/AppTheme"
            app:met_floatingLabel="highlight"
            android:layout_marginStart="25dp"
            android:layout_marginEnd="25dp"
            android:layout_marginTop="5dp"/>

在我的 onCreateView 里面

    //MaterialBetterSpinner code goes from here
            this.materialDesignSpinner = (MaterialBetterSpinner) findViewById(R.id.department_spinner);
            materialDesignSpinner.setHintTextColor(Color.parseColor("#00BE84"));
            materialDesignSpinner.setTextColor(Color.parseColor("#00BE84"));

            materialDesignSpinner.setTextSize(17);
            materialDesignSpinner.setHighlightColor(Color.parseColor("#00BE84"));
            materialDesignSpinner.setUnderlineColor(Color.parseColor("#00BE84"));

            callDepartment= service.getAllOpdIpdDepartments();

ArrayAdapter<String> departmentAdapter = new ArrayAdapter<>(OpdIpdAnalysis.this, android.R.layout.simple_dropdown_item_1line, new ArrayList<String>());
                materialDesignSpinner.setAdapter(departmentAdapter);

            callDepartment.enqueue(new Callback<List<OpdIpdDepartmentModel>>() {
                @Override
                public void onResponse(Call<List<OpdIpdDepartmentModel>> call, Response<List<OpdIpdDepartmentModel>> response) {
                    departmentLists = response.body();

                    if (departmentLists != null){
                        for (int i = 0; i<departmentLists.size(); i++){
                            spinnerLists.add(departmentLists.get(i).getName());
                        }
                    }


                ArrayAdapter<String> adapter = (ArrayAdapter<String>) materialDesignSpinner.getAdapter();

                adapter.clear();
                adapter.addAll(spinnerLists);
                adapter.notifyDataSetChanged();
                }

这里是logcat:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.ritecare, PID: 15345 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Filter.filter(java.lang.CharSequence, android.widget.Filter$FilterListener)' on a null object reference at android.widget.AutoCompleteTextView.performFiltering(AutoCompleteTextView.java:1026) at com.weiwangcn.betterspinner.library.material.MaterialBetterSpinner.onFocusChanged(MaterialBetterSpinner.java:49) at android.view.View.handleFocusGainInternal(View.java:7478) at android.view.View.requestFocusNoSearch(View.java:12441) at android.view.View.requestFocus(View.java:12415) at android.view.View.requestFocus(View.java:12382) at android.view.View.requestFocus(View.java:12324) at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2166) at android.app.Activity.onRestoreInstanceState(Activity.java:1563) at android.app.Activity.performRestoreInstanceState(Activity.java:1518) at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1346) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3310) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

尝试在 MaterialBetterSpinner 的初始化过程中添加:

ArrayAdapter<String> departmentAdapter = new ArrayAdapter<>(OpdIpdAnalysis.this, android.R.layout.simple_dropdown_item_1line, new ArrayList<String>());
materialDesignSpinner.setAdapter(departmentAdapter);

并在 onResponse 内:

ArrayAdapter<String> adapter = (ArrayAdapter<String>) materialDesignSpinner.getAdapter();

adapter.clear()
adapter.addAll(spinnerLists)
adapter.notifyDataSetChanged()

我找到了更好的 material 微调器库

我们应该使用 ganfra/MaterialSpinner 库

简单更健壮

这里是link:

https://github.com/ganfra/MaterialSpinner