【问题标题】:Error spinner in popup window when I click单击时弹出窗口中的错误微调器
【发布时间】:2020-02-14 15:15:17
【问题描述】:

我的应用程序如果 poulsas 一个按钮是一个有两个微调器的弹出窗口,那么我就可以在那里弹出窗口,但是当我得到错误时,是我点击微调器时。

这里有我下面的代码和调试,因为 logcat 我做对了。

 public void añadirRegistro(View v){

         showPopup(leer_registros.this);
    }
    private void showPopup(final Activity context) {

           Spinner eleccionIP,eleccionRegistro;
           borrar_datos BorrarDatos = new borrar_datos ();
           // Inflate the popup_layout.xml
           RelativeLayout viewGroup = (RelativeLayout) context.findViewById(R.id.popup);
           LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          View layout = layoutInflater.inflate(R.layout.popup_elegir_registros, viewGroup);


           eleccionIP = (Spinner) layout.findViewById(R.id.popupIP);
           eleccionRegistro = (Spinner)layout.findViewById(R.id.popupRegistro);



           /*Cursor cur=BorrarDatos.obtenerIP();
           BorrarDatos.rellenarSpinner(cur,eleccionIP);*/


           final PopupWindow popup = new PopupWindow(context);
           popup.setContentView(layout);
           popup.setWidth(LayoutParams.WRAP_CONTENT);
           popup.setHeight(LayoutParams.WRAP_CONTENT);
           popup.setFocusable(true);

           popup.showAtLocation(layout, Gravity.NO_GRAVITY, 200, 200);


           ArrayAdapter <CharSequence> adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item);
           adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

           adapter.add("item 1");
           adapter.add("item 2");
           eleccionIP.setAdapter(adapter);




    }

调试:

WindowManagerGlobal.addView(View, ViewGroup$LayoutParams, Display, Window) line: 255    
WindowManagerImpl.addView(View, ViewGroup$LayoutParams) line: 69    
PopupWindow.invokePopup(WindowManager$LayoutParams) line: 993   
PopupWindow.showAsDropDown(View, int, int) line: 899    
Spinner$DropdownPopup(ListPopupWindow).show() line: 603 
Spinner$DropdownPopup.show() line: 981  
Spinner.performClick() line: 609    
View$PerformClick.run() line: 17355 
Handler.handleCallback(Message) line: 725   
ViewRootImpl$ViewRootHandler(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 137 
ActivityThread.main(String[]) line: 5041    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 511  
ZygoteInit$MethodAndArgsCaller.run() line: 793  
ZygoteInit.main(String[]) line: 560 
NativeStart.main(String[]) line: not available [native method]  

我的第二个错误的调试:

Scada [Android Application] 
    DalvikVM[localhost:8636]    
        Thread [<1> main] (Suspended (exception WindowManager$BadTokenException))   
            WindowManagerGlobal.addView(View, ViewGroup$LayoutParams, Display, Window) line: 255    
            WindowManagerImpl.addView(View, ViewGroup$LayoutParams) line: 69    
            PopupWindow.invokePopup(WindowManager$LayoutParams) line: 993   
            PopupWindow.showAsDropDown(View, int, int) line: 899    
            Spinner$DropdownPopup(ListPopupWindow).show() line: 603 
            Spinner$DropdownPopup.show() line: 981  
            Spinner.performClick() line: 609    
            View$PerformClick.run() line: 17355 
            Handler.handleCallback(Message) line: 725   
            ViewRootImpl$ViewRootHandler(Handler).dispatchMessage(Message) line: 92 
            Looper.loop() line: 137 
            ActivityThread.main(String[]) line: 5041    
            Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
            Method.invoke(Object, Object...) line: 511  
            ZygoteInit$MethodAndArgsCaller.run() line: 793  
            ZygoteInit.main(String[]) line: 560 
        Thread [<10> Binder_2] (Running)    
        Thread [<9> Binder_1] (Running) 
        Thread [<11> AsyncTask #1] (Running)    
        Thread [<12> AsyncTask #2] (Running)    
        Thread [<13> AsyncTask #3] (Running)    
        Thread [<14> AsyncTask #4] (Running)    
        Thread [<15> AsyncTask #5] (Running)

我做了调试,错误一定是在这里:

RelativeLayout viewGroup = (RelativeLayout) ((Activity) context).findViewById(R.id.popup);
           LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           View layout = layoutInflater.inflate(R.layout.popup_elegir_registros, viewGroup);


           eleccionIP = (Spinner)layout.findViewById(R.id.popupIP);
           eleccionRegistro = (Spinner)layout.findViewById(R.id.popupRegistro);

【问题讨论】:

  • 这是您发布的完整日志吗?
  • 是的!请帮忙!没有人帮助我...
  • 如何调试它并找出究竟是哪一行导致了问题?
  • 不是那一行是问题所在,我只是每次单击时都会这样做,程序停止并直接进入 ADT 并得到调试,这是我设置的。
  • 能否将构造函数更改为 Context 而不是 Activity 并使用它来实例化弹出窗口?

标签: android click spinner popupwindow


【解决方案1】:

在微调器中添加 android:spinnerMode="dialog" 解决了我的问题。

How to create a Spinner widget inside of a PopupWindow in Android? Get BadTokenException when clicking on Spinner

【讨论】:

  • 非常感谢,节省我的时间。 :)
【解决方案2】:

我解决了同样的问题。在 xml 类中添加你的微调器。

android:spinnerMode="dialog"

【讨论】:

    【解决方案3】:

    用这个替换适当的行,看看会发生什么:

    final View layout = layoutInflater.inflate(R.layout.popup_elegir_registros, new ViewGroup(this) {
    
        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            // TODO Auto-generated method stub
    
        }
    });
    
        eleccionIP = (Spinner) layout.findViewById(R.id.popupIP);
        eleccionRegistro = (Spinner)layout.findViewById(R.id.popupRegistro);
    
    
    
        /*Cursor cur=BorrarDatos.obtenerIP();
        BorrarDatos.rellenarSpinner(cur,eleccionIP);*/
    
    
    
        final PopupWindow popup = new PopupWindow(context);
        popup.setContentView(layout);
        popup.setWidth(LayoutParams.WRAP_CONTENT);
        popup.setHeight(LayoutParams.WRAP_CONTENT);
        popup.setFocusable(true);
    
        new Handler().postDelayed(new Runnable(){
    
            public void run() {
                popup.showAtLocation(layout, Gravity.NO_GRAVITY, 200, 200);
            }
    
        }, 100L);
    
        ArrayAdapter <CharSequence> adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
        adapter.add("item 1");
        adapter.add("item 2");
        eleccionIP.setAdapter(adapter);
    

    this 将帮助创建一个弹出窗口和this

    【讨论】:

    • me da error en viewGroup... 错误:此行有多个标记 - ViewGroup 无法解析为类型 - LayoutInflater 类型中的方法 inflate(int, ViewGroup) 不适用于参数(int, new ViewGroup(){})
    • 尝试清理项目。
    • 进入项目,在eclipse的菜单栏上选择clean,选择这个项目。并确保您的代码中的 LayoutInflater 行与此替换代码一起存在
    • 那么我想你必须在谷歌上搜索并首先创建一个只处理弹出窗口的新项目:)
    【解决方案4】:

    如果您想在弹出窗口中设置微调器,请执行以下操作:

    //this your inside layout
    final LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    //and that is your spinner
    ArrayAdapter<String> adapterState =
                    new ArrayAdapter<String>(
                            layoutInflater.getContext(),
                            android.R.layout.simple_spinner_item,
                            keysState);
    
            adapterState.setDropDownViewResource(
                    android.R.layout.simple_spinner_dropdown_item);
            spinnerState.setAdapter(adapterState);
    

    使用 layout.getContext() 代替 getApplicationContext() 或 Activty.this 等 因为您在另一个布局视图中。

    【讨论】:

      【解决方案5】:

      试试这个,

      //声明你的数组列表并添加一些它

        private ArrayList<String> item = new ArrayList<String>();
        item.add("1");
        item.add("2");
      

      // 像这样改变你的数组适配器

        ArrayAdapter <CharSequence> adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,list);
             adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        eleccionIP.setAdapter(adapter);
      

      【讨论】:

      • 正如你所说的那样,我失败了,我必须这样说: ArrayList list= new ArrayList(); list.add("1"); list.add("2"); ArrayAdapter 适配器 = new ArrayAdapter(this,android.R.layout.simple_spinner_item,list); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); eleccionIP.setAdapter(适配器);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多