Проблема с Android Spinner - PullRequest
       1

Проблема с Android Spinner

0 голосов
/ 15 сентября 2011

, когда я нажимаю на спиннер, мое приложение падает и выдает исключение, например "android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application "

 String[] s = new String[60];
        int i;
        for (i = 0; i < 60; i++) {
            s[i] = Integer.toString(i + 1);
        }

        Spinner spin = (Spinner) findViewById(R.id.TimeSpinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, s);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(adapter);
        spin.setOnItemSelectedListener(new MyOnItemSelectedListener());

class MyOnItemSelectedListener implements OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> parent, View view, int pos,
                long id) {
            spvalue = parent.getItemAtPosition(pos).toString();

        }

        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    }

enter code here Logcat

I/ActivityManager(   66): Displayed activity com.imt.main/.TimeSpinner: 503 ms (total 503 ms)
W/WindowManager(   66): Attempted to add window with non-application token WindowToken{43fc5cf8 token=null}.  Aborting.
D/AndroidRuntime( 1382): Shutting down VM
W/dalvikvm( 1382): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime( 1382): FATAL EXCEPTION: main
E/AndroidRuntime( 1382): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
E/AndroidRuntime( 1382):        at android.view.ViewRoot.setView(ViewRoot.java:509)
E/AndroidRuntime( 1382):        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
E/AndroidRuntime( 1382):        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
E/AndroidRuntime( 1382):        at android.app.Dialog.show(Dialog.java:241)
E/AndroidRuntime( 1382):        at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
E/AndroidRuntime( 1382):        at android.widget.Spinner.performClick(Spinner.java:257)
E/AndroidRuntime( 1382):        at android.view.View$PerformClick.run(View.java:8816)
E/AndroidRuntime( 1382):        at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 1382):        at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 1382):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 1382):        at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 1382):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1382):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 1382):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 1382):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 1382):        at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(   66):   Force finishing activity com.imt.main/.TimeSpinner
W/ActivityManager(   66): Activity pause timeout for HistoryRecord{43f92d70 com.imt.main/.TimeSpinner}

Ответы [ 3 ]

1 голос
/ 31 августа 2012

Я столкнулся с той же проблемой, и теперь решил ее.Я использую GroupActivity для приложения на основе вкладок.

Если вы используете GroupActivity и возникает эта проблема, то это просто из-за контекста.Вы не можете передать правильный контекст на счетчик, и он выдает ошибку

Теперь решение таково:

  1. Создайте любой макет, например LinearLayout, вместо счетчика в вашем xml
  2. Динамически создайте Spinner с помощью кода Java, как показано ниже, и добавьте его в свой linearLayout:

    Spinner yourSpinner = new Spinner (getParent ());// динамически Spinner yourLinearLayout.addView (yourDriverSpinner);// your linearlayout

  3. Теперь делайте все, что вы хотите сделать с вращателем.

Это мне очень поможет, а также поможет вам.

Тем не менее, если есть какая-либо ошибка, дайте мне знать.

Наслаждайтесь.

:)

0 голосов
/ 15 сентября 2011

Вот простой пример спиннера

0 голосов
/ 15 сентября 2011

Определите это на уровне класса как переменную члена

String[] s = new String[60];

замените эту строку

spvalue = parent.getItemAtPosition(pos).toString();

этой

spvalue = s[pos];
...