[英]Java Android Spinner onItemSelected
我遇到的問題是onItemSelected方法。 每當我嘗試更改Views值(例如: TextView
, EditView
它將引發錯誤。
我想做的是,當我在微調器上單擊某些內容時,它將在文本上顯示某些內容(當前為任何內容)。 希望您能提供幫助! 謝謝。
這是我的代碼,因此您可以看一下:
public class MainActivity extends Activity implements OnItemSelectedListener {
Spinner spinner;
String[] paths = {"Rectangle", "Circle", "Triangle"};
String selected;
Button equals;
TextView parm1, parm2;
EditText value1, value2;
CheckBox checkArea, checkPerm;
Boolean checkedArea = true, checkedPerm = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, paths);
spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
int index = arg0.getSelectedItemPosition();
if(paths[index] == "Rectangle"){
//Does work
Toast.makeText(getBaseContext(), "You selected Rectangle", Toast.LENGTH_LONG).show();
//Doesn't work
parm1.setText("Hello");
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
這是我運行程序時彈出的錯誤。 當我打開虛擬設備時,虛擬設備將一直運行該程序,然后它會說“ * Programs_name” *停止工作。 這是錯誤日志:
02-12 17:26:41.395: D/dalvikvm(1478): GC_FOR_ALLOC freed 45K, 4% free 3331K/3444K, paused 47ms, total 51ms
02-12 17:26:41.985: D/AndroidRuntime(1478): Shutting down VM
02-12 17:26:41.985: W/dalvikvm(1478): threadid=1: thread exiting with uncaught exception (group=0xb1aadba8)
02-12 17:26:41.995: E/AndroidRuntime(1478): FATAL EXCEPTION: main
02-12 17:26:41.995: E/AndroidRuntime(1478): Process: com.example.gcfcalculator, PID: 1478
02-12 17:26:41.995: E/AndroidRuntime(1478): java.lang.NullPointerException
02-12 17:26:41.995: E/AndroidRuntime(1478): at com.example.gcfcalculator.MainActivity.onItemSelected(MainActivity.java:53)
02-12 17:26:41.995: E/AndroidRuntime(1478): at android.widget.AdapterView.fireOnSelected(AdapterView.java:893)
02-12 17:26:41.995: E/AndroidRuntime(1478): at android.widget.AdapterView.access$200(AdapterView.java:48)
02-12 17:26:41.995: E/AndroidRuntime(1478): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:861)
02-12 17:26:41.995: E/AndroidRuntime(1478): at android.os.Handler.handleCallback(Handler.java:733)
02-12 17:26:41.995: E/AndroidRuntime(1478): at android.os.Handler.dispatchMessage(Handler.java:95)
02-12 17:26:41.995: E/AndroidRuntime(1478): at android.os.Looper.loop(Looper.java:136)
02-12 17:26:41.995: E/AndroidRuntime(1478): at android.app.ActivityThread.main(ActivityThread.java:5017)
02-12 17:26:41.995: E/AndroidRuntime(1478): at java.lang.reflect.Method.invokeNative(Native Method)
02-12 17:26:41.995: E/AndroidRuntime(1478): at java.lang.reflect.Method.invoke(Method.java:515)
02-12 17:26:41.995: E/AndroidRuntime(1478): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-12 17:26:41.995: E/AndroidRuntime(1478): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-12 17:26:41.995: E/AndroidRuntime(1478): at dalvik.system.NativeStart.main(Native Method)
02-12 17:26:47.055: I/Process(1478): Sending signal. PID: 1478 SIG: 9
您沒有對TextView parm1的引用,要獲取引用,您必須首先調用findViewById,如下所示:
parm1 = (TextView) findViewById(R.id.yourId);
在執行此操作之前,您將能夠使用該textView,並且在比較字符串時,不要使用==而是使用Object.equal(),並且作為一個有用的小技巧,如果您使用文字字符串而不是這樣做
paths[index].equals("Rectangle")
做
"Rectangle".equals(paths[index])
這樣,您就可以對空指針異常進行額外的驗證,因為您的文字永遠不可能為空,但是“ paths [index]”可能為空
希望能幫助到你!
問候!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.