首页 > 解决方案 > AutoCompleteTextView 上的 Android 材质微调器 NullPointerException

问题描述

旋转屏幕时获取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();
                }

这是日志猫:

E / AndroidRuntime:致命异常:主进程:com.example.ritecare,PID:15345 java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.Filter.filter(java.lang.CharSequence,android.widget。 Filter$FilterListener)' 在 com.weiwangcn.betterspinner.library.material.MaterialBetterSpinner.onFocusChanged(MaterialBetterSpinner.java:49) 的 android.widget.AutoCompleteTextView.performFiltering(AutoCompleteTextView.java:1026) 的空对象引用上.View.handleFocusGainInternal(View.java:7478) 在 android.view.View.requestFocusNoSearch(View.java:12441) 在 android.view.View.requestFocus(View.java:12415) 在 android.view.View.requestFocus( View.java:12382) 在 android.view.View.requestFocus(View.java:12324) 在 com。android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2166) 在 android.app.Activity.onRestoreInstanceState(Activity.java:1563) 在 android.app.Activity.performRestoreInstanceState(Activity.java:1518) 在 android.app .Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1346) 在 android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) 在 android.app.ActivityThread.handleStartActivity(ActivityThread.java:3310) 在 android.app.servertransaction。 TransactionExecutor.cycleToPath(TransactionExecutor.java:201) 在 android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:214) 的 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) ) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492 ) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 的 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 调用(本机方法)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 的 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 调用(本机方法)

标签: androidexceptionmaterial-designandroid-spinner

解决方案


尝试在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()

推荐阅读