如何正确引用 Spinner 条目?
How to refer a Spinner entry correctly?
我一直在为 Android 制作一个应用程序,它使用 Spinner 列表来显示几个城市的名称。我需要程序更改微调器正下方的 TextView 以显示所选项目在数组中的位置。我为相同的
写了下面的代码
public class MainScreen extends Activity {
String[] cityArray = { "Agra ", "Ahmedabad", "Alappuzha", "Amritsar"};
Spinner list = (Spinner) findViewById(R.id.ListView1);
TextView nam = (TextView)findViewById(R.id.textView2);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listview, cityArray);
list.setAdapter(adapter);
list.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View view,int position, long id)
{
nam.setText(list.getSelectedItemPosition());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
nam.setText("None Selected");
}
});
}
}
程序运行没有错误,但应用程序只是在打开后立即强制关闭。
Logcat:
04-10 08:49:30.423: I/dalvikvm(561): threadid=3: reacting to signal 3
04-10 08:49:30.723: I/dalvikvm(561): Wrote stack traces to '/data/anr/traces.txt'
04-10 08:49:30.783: I/dalvikvm(561): threadid=3: reacting to signal 3
04-10 08:49:30.823: D/AndroidRuntime(561): Shutting down VM
04-10 08:49:30.823: W/dalvikvm(561): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
04-10 08:49:30.844: E/AndroidRuntime(561): FATAL EXCEPTION: main
04-10 08:49:30.844: E/AndroidRuntime(561): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.droidrish.droidweather/com.droidrish.droidweather.MainScreen}: java.lang.NullPointerException
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.access0(ActivityThread.java:123)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.os.Handler.dispatchMessage(Handler.java:99)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.os.Looper.loop(Looper.java:137)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.main(ActivityThread.java:4424)
04-10 08:49:30.844: E/AndroidRuntime(561): at java.lang.reflect.Method.invokeNative(Native Method)
04-10 08:49:30.844: E/AndroidRuntime(561): at java.lang.reflect.Method.invoke(Method.java:511)
04-10 08:49:30.844: E/AndroidRuntime(561): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-10 08:49:30.844: E/AndroidRuntime(561): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-10 08:49:30.844: E/AndroidRuntime(561): at dalvik.system.NativeStart.main(Native Method)
04-10 08:49:30.844: E/AndroidRuntime(561): Caused by: java.lang.NullPointerException
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.Activity.findViewById(Activity.java:1794)
04-10 08:49:30.844: E/AndroidRuntime(561): at com.droidrish.droidweather.MainScreen.<init>(MainScreen.java:15)
04-10 08:49:30.844: E/AndroidRuntime(561): at java.lang.Class.newInstanceImpl(Native Method)
04-10 08:49:30.844: E/AndroidRuntime(561): at java.lang.Class.newInstance(Class.java:1319)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
04-10 08:49:30.844: E/AndroidRuntime(561): ... 11 more
04-10 08:49:30.844: I/dalvikvm(561): Wrote stack traces to '/data/anr/traces.txt'
04-10 08:49:31.416: I/dalvikvm(561): threadid=3: reacting to signal 3
04-10 08:49:31.443: I/dalvikvm(561): Wrote stack traces to '/data/anr/traces.txt'
04-10 08:49:31.583: I/dalvikvm(561): threadid=3: reacting to signal 3
04-10 08:49:31.603: I/dalvikvm(561): Wrote stack traces to '/data/anr/traces.txt'
04-10 08:49:33.722: I/Process(561): Sending signal. PID: 561 SIG: 9
我使用 OnItemSelected 侦听器的方式是否正确?我期待程序将 TextView 的文本更改为 Spinner 中项目的位置。
这是问题所在:
Spinner list = (Spinner) findViewById(R.id.ListView1);
TextView nam = (TextView)findViewById(R.id.textView2);
将这些移动到 onCreate()
下方的 setContentView()
。
Spinner 和 textview 应该像这样在 onCreate 中初始化:
public class MainScreen extends Activity {
String[] cityArray = { "Agra ", "Ahmedabad", "Alappuzha", "Amritsar"};
Spinner list;
TextView nam;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
list = (Spinner)findViewById(R.id.ListView1);
nam = (TextView)findViewById(R.id.textView2);
然后更改为:
nam.setText(list.getSelectedItemPosition());
至:
nam.setText(list.getSelectedItem().toString());
如果您只需要索引,请执行以下操作:
nam.setText(String.valueOf(list.getSelectedItemPosition()));
我一直在为 Android 制作一个应用程序,它使用 Spinner 列表来显示几个城市的名称。我需要程序更改微调器正下方的 TextView 以显示所选项目在数组中的位置。我为相同的
写了下面的代码public class MainScreen extends Activity {
String[] cityArray = { "Agra ", "Ahmedabad", "Alappuzha", "Amritsar"};
Spinner list = (Spinner) findViewById(R.id.ListView1);
TextView nam = (TextView)findViewById(R.id.textView2);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listview, cityArray);
list.setAdapter(adapter);
list.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View view,int position, long id)
{
nam.setText(list.getSelectedItemPosition());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
nam.setText("None Selected");
}
});
}
}
程序运行没有错误,但应用程序只是在打开后立即强制关闭。
Logcat:
04-10 08:49:30.423: I/dalvikvm(561): threadid=3: reacting to signal 3
04-10 08:49:30.723: I/dalvikvm(561): Wrote stack traces to '/data/anr/traces.txt'
04-10 08:49:30.783: I/dalvikvm(561): threadid=3: reacting to signal 3
04-10 08:49:30.823: D/AndroidRuntime(561): Shutting down VM
04-10 08:49:30.823: W/dalvikvm(561): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
04-10 08:49:30.844: E/AndroidRuntime(561): FATAL EXCEPTION: main
04-10 08:49:30.844: E/AndroidRuntime(561): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.droidrish.droidweather/com.droidrish.droidweather.MainScreen}: java.lang.NullPointerException
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.access0(ActivityThread.java:123)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.os.Handler.dispatchMessage(Handler.java:99)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.os.Looper.loop(Looper.java:137)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.main(ActivityThread.java:4424)
04-10 08:49:30.844: E/AndroidRuntime(561): at java.lang.reflect.Method.invokeNative(Native Method)
04-10 08:49:30.844: E/AndroidRuntime(561): at java.lang.reflect.Method.invoke(Method.java:511)
04-10 08:49:30.844: E/AndroidRuntime(561): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-10 08:49:30.844: E/AndroidRuntime(561): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-10 08:49:30.844: E/AndroidRuntime(561): at dalvik.system.NativeStart.main(Native Method)
04-10 08:49:30.844: E/AndroidRuntime(561): Caused by: java.lang.NullPointerException
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.Activity.findViewById(Activity.java:1794)
04-10 08:49:30.844: E/AndroidRuntime(561): at com.droidrish.droidweather.MainScreen.<init>(MainScreen.java:15)
04-10 08:49:30.844: E/AndroidRuntime(561): at java.lang.Class.newInstanceImpl(Native Method)
04-10 08:49:30.844: E/AndroidRuntime(561): at java.lang.Class.newInstance(Class.java:1319)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
04-10 08:49:30.844: E/AndroidRuntime(561): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
04-10 08:49:30.844: E/AndroidRuntime(561): ... 11 more
04-10 08:49:30.844: I/dalvikvm(561): Wrote stack traces to '/data/anr/traces.txt'
04-10 08:49:31.416: I/dalvikvm(561): threadid=3: reacting to signal 3
04-10 08:49:31.443: I/dalvikvm(561): Wrote stack traces to '/data/anr/traces.txt'
04-10 08:49:31.583: I/dalvikvm(561): threadid=3: reacting to signal 3
04-10 08:49:31.603: I/dalvikvm(561): Wrote stack traces to '/data/anr/traces.txt'
04-10 08:49:33.722: I/Process(561): Sending signal. PID: 561 SIG: 9
我使用 OnItemSelected 侦听器的方式是否正确?我期待程序将 TextView 的文本更改为 Spinner 中项目的位置。
这是问题所在:
Spinner list = (Spinner) findViewById(R.id.ListView1);
TextView nam = (TextView)findViewById(R.id.textView2);
将这些移动到 onCreate()
下方的 setContentView()
。
Spinner 和 textview 应该像这样在 onCreate 中初始化:
public class MainScreen extends Activity {
String[] cityArray = { "Agra ", "Ahmedabad", "Alappuzha", "Amritsar"};
Spinner list;
TextView nam;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
list = (Spinner)findViewById(R.id.ListView1);
nam = (TextView)findViewById(R.id.textView2);
然后更改为:
nam.setText(list.getSelectedItemPosition());
至:
nam.setText(list.getSelectedItem().toString());
如果您只需要索引,请执行以下操作:
nam.setText(String.valueOf(list.getSelectedItemPosition()));