简体   繁体   English

Android Spinner -onItemSelected

[英]android spinner -onItemSelected

I am a Beginner. 我是初学者。 I have a problem with a spinner. 我有一个微调框的问题。 I want to create a spinner by using onItemSelected method and to display that selected spinner item in TextView 我想使用onItemSelected方法创建一个微调框,并在TextView中显示该选定的微调框项目

But my program is not running in emulator. 但是我的程序未在模拟器中运行。 it says "Program stopped".. what was my mistake in below program. 它说“程序已停止” ..我在以下程序中的错误是什么。 Pls help me.. Thanks U.. 请帮我..谢谢你

My SpinOnItemActivity.java 我的SpinOnItemActivity.java

package spinner.onitemsel;
import android.app.Activity;
  import android.os.Bundle;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.Spinner;
 import android.widget.TextView;
 import android.view.View.OnClickListener;

  public class SpinOnItemActivity extends Activity  
  {
    Spinner sp= (Spinner) findViewById(R.id.spin);;

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.spinner_array , android.R.layout.simple_spinner_item);




            public void onCreate(Bundle savedInstanceState)
            {           
                      super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_spin_on_item );

                    sp.performClick();

            }
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {    
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                sp.setAdapter(adapter);

                String Name = (String) sp.getSelectedItem();

                TextView tview1 = (TextView)findViewById(R.id.testtxt );
                tview1.setText(Name);

            }

 }

My activity_spin_on_item.xml file 我的activity_spin_on_item.xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SpinActivity" >

<Spinner
    android:id="@+id/spin"
    android:layout_width="149dp"
    android:layout_height="66dp"
    android:layout_alignBottom="@+id/button1"
    android:layout_alignParentLeft="true"
    android:layout_alignRight="@+id/testtxt"
    android:layout_gravity="top" />


<TextView
    android:id="@+id/testtxt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/testtxt2"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="44dp"
    android:gravity="bottom"
    android:text="Spin Txt" />

 </RelativeLayout>

My logcat Report 我的日志报告

12-10 09:58:40.988: W/Trace(837): Unexpected value from nativeGetEnabledTags: 0
12-10 09:58:41.168: W/Trace(837): Unexpected value from nativeGetEnabledTags: 0
12-10 09:58:41.198: W/Trace(837): Unexpected value from nativeGetEnabledTags: 0
12-10 09:58:41.878: D/dalvikvm(837): GC_CONCURRENT freed 51K, 6% free 2830K/2996K, paused 12ms+3ms, total 56ms
12-10 09:58:41.878: D/dalvikvm(837): WAIT_FOR_CONCURRENT_GC blocked 25ms
12-10 09:58:41.968: D/AndroidRuntime(837): Shutting down VM
12-10 09:58:41.968: W/dalvikvm(837): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
12-10 09:58:41.988: E/AndroidRuntime(837): FATAL EXCEPTION: main
12-10 09:58:41.988: E/AndroidRuntime(837): java.lang.RuntimeException: Unable to start activity ComponentInfo{spinner.onitemsel/spinner.onitemsel.SpinOnItemActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.os.Looper.loop(Looper.java:137)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.app.ActivityThread.main(ActivityThread.java:5039)
12-10 09:58:41.988: E/AndroidRuntime(837):  at java.lang.reflect.Method.invokeNative(Native Method)
12-10 09:58:41.988: E/AndroidRuntime(837):  at java.lang.reflect.Method.invoke(Method.java:511)
12-10 09:58:41.988: E/AndroidRuntime(837):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-10 09:58:41.988: E/AndroidRuntime(837):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-10 09:58:41.988: E/AndroidRuntime(837):  at dalvik.system.NativeStart.main(Native Method)
12-10 09:58:41.988: E/AndroidRuntime(837): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.view.ViewRootImpl.setView(ViewRootImpl.java:567)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.widget.PopupWindow.invokePopup(PopupWindow.java:993)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:899)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.widget.ListPopupWindow.show(ListPopupWindow.java:603)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.widget.Spinner$DropdownPopup.show(Spinner.java:981)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.widget.Spinner.performClick(Spinner.java:609)
12-10 09:58:41.988: E/AndroidRuntime(837):  at spinner.onitemsel.SpinOnItemActivity.onCreate(SpinOnItemActivity.java:35)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.app.Activity.performCreate(Activity.java:5104)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-10 09:58:41.988: E/AndroidRuntime(837):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-10 09:58:41.988: E/AndroidRuntime(837):  ... 11 more
12-10 10:03:42.109: I/Process(837): Sending signal. PID: 837 SIG: 9

My Edited Code: Pls Check it out.. 我的编辑代码:请签出。

 package spinner.onitemsel;
 import android.app.Activity;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Spinner;
 import android.widget.TextView;

 public class SpinOnItemActivity extends Activity  
 {      
    ArrayAdapter<CharSequence> adapter;
    Spinner sp;
    TextView tview1;
    int length;

            public void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_spin_on_item );

                sp= (Spinner) findViewById(R.id.spin);


                adapter = ArrayAdapter.createFromResource(this, R.array.spinner_array ,           android.R.layout.simple_spinner_item);
                     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                sp.setAdapter(adapter);
                sp.performClick();       
            }
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {    
                String Name = (String) sp.getSelectedItem();
                tview1 = (TextView)findViewById(R.id.testtxt );
                tview1.setText(Name);

            }

 }
Spinner sp= (Spinner) findViewById(R.id.spin);;

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.spinner_array , android.R.layout.simple_spinner_item);

will come inside your onCreate() method after setContentView() setContentView()之后将出现在onCreate()方法中


Edit: Then 编辑:然后

 sp.setAdapter(adapter);
 TextView tview1 = (TextView)findViewById(R.id.testtxt );

will also come in onCreate() method after setContentView() setContentView()之后也将出现在onCreate()方法中

Edit: 编辑:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spin_on_item);
        Spinner sp = (Spinner) findViewById(R.id.spin);

        TextView tview1 = (TextView) findViewById(R.id.testtxt);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.spinner_array,
                android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adapter);

        sp.performClick();

    }

    public void onItemSelected(AdapterView<?> adapterView, View view, int i,
            long l) {

        String Name = (String) sp.getSelectedItem();
        tview1.setText(Name);

    }

Actually your Spinner sp is null , So when code line sp.performClick(); 实际上您的Spinner spnull ,所以当代码行sp.performClick(); is executed in onCreate() the application crashes with Null Pointer Exception . onCreate()执行时,应用程序因Null Pointer Exception崩溃。

Because you are defining Spinner sp in above onCreate() so android doesn't find the Spinner sp from Layout Xml file. 由于您是在onCreate()onCreate() Spinner sp ,因此android从Layout Xml文件中找不到Spinner sp It should be after setContentView() so android nut shell has a reference of that Spinner for particular Activity. 应该在setContentView()以便android nut shell对特定的Activity具有该Spinner的引用。

Solution: 解:

Put these lines, 把这些线,

Spinner sp = (Spinner) findViewById(R.id.spin);;

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.spinner_array , android.R.layout.simple_spinner_item);

in onCreate() of Activity after setContentView(R.layout.activity_spin_on_item ); setContentView(R.layout.activity_spin_on_item );之后的Activity的onCreate()setContentView(R.layout.activity_spin_on_item );

Something like, 就像是,

public void onCreate(Bundle savedInstanceState)
{           
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_spin_on_item );

 Spinner sp= (Spinner) findViewById(R.id.spin);;
 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.spinner_array , android.R.layout.simple_spinner_item);
 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 sp.setAdapter(adapter);

 sp.performClick();
}

Update:2 更新:2

From your activity_spin_on_item.xml File. 从您的activity_spin_on_item.xml文件中。

Look at Parent Tag, 看父母标签,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SpinActivity" >

In this the attribute 在这个属性

tools:context=".SpinActivity"

should be tools:context=".SpinOnItemActivity" 应该是tools:context=".SpinOnItemActivity"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM