在片段中的popupwindow中按下微调器时,应用程序崩溃 [英] app crashes when spinner is pressed inside popupwindow which is located in fragment

查看:94
本文介绍了在片段中的popupwindow中按下微调器时,应用程序崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有按钮的片段.按下该按钮,如果输入的用户凭据与有效用户匹配(输入字段ara被选中以请求api),则会显示一个弹出窗口,其中包含一个微调器,一个textview和一个editext.

i have a fragment with a button. The button is pressed and if the user credentials entered match a valid user(the input fields ara being checked requests to rest api) a popupwindow is displayed with a spinner, a textview and an editext.

称为

public void onResponse(String response) {
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        String success = jsonObject.getString(AppConfig.TAG_ERROR);
                        if (success.equals("true")){
                           errorresponseTtv.setText(jsonObject.getString(AppConfig.TAG_ERROR_MSG));
                        }
                        else{
                           errorresponseTtv.setText("Success!:\n User-> " + jsonObject.getString(AppConfig.TAG_USERNAME) + ", password-> " + jsonObject.getString(AppConfig.TAG_PASSWORD) + ", email-> " + jsonObject.getString(AppConfig.TAG_EMAIL));
                            inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                            View layout = inflater.inflate(R.layout.popup_login, null);

                            createPopUpWindow(layout);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

createPopUpWindow()

createPopUpWindow()

private void createPopUpWindow(final View layout) {
            popupWindow = new PopupWindow(layout,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    true);
            firmSpnr = (Spinner) layout.findViewById(R.id.firmSpnr);
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, arrayList);
            firmSpnr.setAdapter(arrayAdapter);
            popupWindow.setOutsideTouchable(true);
            popupWindow.setBackgroundDrawable(new ShapeDrawable());
            popupWindow.showAtLocation(layout, Gravity.CENTER, 0, 0);
            popupWindow.update();
}

将按预期显示popupWindow,但是当我按下微调器时会出现问题.

the popupWindow is displayed as it is expected but the problem occurs when i press the spinner.

日志消息为"Unable to add window -- token android.view.ViewRootImp"您的活动正在运行吗? 我搜索了其他人遇到的任何类似问题,并且发现必须推迟显示弹出窗口,直到调用所有生命周期方法为止.谁能提供解决此错误的解决方案?

The log message is "Unable to add window -- token android.view.ViewRootImp" is your activity running? i have searched about any similar issues others have faced and i found out that i must defer showing the popup until after all the lifecycle methods are called. Can anyone provide a solution on how to fix the error?

记录错误消息

FATAL EXCEPTION: main
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime: Process: com.votingsystem.tsiro.votingsystem, PID: 32577
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime: android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@421769f8 is not valid; is your activity running?
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.view.ViewRootImpl.setView(ViewRootImpl.java:532)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.widget.PopupWindow.invokePopup(PopupWindow.java:1019)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:925)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.support.v7.internal.widget.AppCompatPopupWindow.showAsDropDown(AppCompatPopupWindow.java:78)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.support.v4.widget.PopupWindowCompatKitKat.showAsDropDown(PopupWindowCompatKitKat.java:30)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.support.v4.widget.PopupWindowCompat$KitKatPopupWindowImpl.showAsDropDown(PopupWindowCompat.java:92)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.support.v4.widget.PopupWindowCompat.showAsDropDown(PopupWindowCompat.java:171)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.support.v7.widget.ListPopupWindow.show(ListPopupWindow.java:654)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.support.v7.widget.AppCompatSpinner$DropdownPopup.show(AppCompatSpinner.java:766)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.support.v7.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:424)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:18446)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:733)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5146)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
11-03 18:56:17.703 32577-32577/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

推荐答案

在Google https://code.google.com/p/android/issues/detail?id=202246

但是,在发布Android支持库之后,修订版 23.2.1 (2016年3月)此问题已解决.

But after release of Android Support Library, revision 23.2.1 (March 2016) This issue has been resolved.

修复了API级别21及以下与AppCompatSpinner的兼容性崩溃

将支持库更新为Android Support Library to 23.2.1

这篇关于在片段中的popupwindow中按下微调器时,应用程序崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆