【发布时间】:2014-01-25 17:51:42
【问题描述】:
我有one spinner, two adapters and two buttons
当第一个按钮被点击时,maleAdapter 被调用 当单击另一个按钮时,会调用 femaleAdapter。 到目前为止,这很完美。
现在。我的问题是当每个适配器被调用时,显然会调用两个不同的数组,但我希望它们做不同的事情。
Spinner spinner;
String[] maleItems = { "item 1", "item 2", "item 3" };
String[] femaleItems = { "item 3", "item 2", "item 1", "item 0" };
Button maleButton;
Button femaleButton;
ArrayAdapter<String> maleAdapter;
ArrayAdapter<String> femaleAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayAdapter<String> maleAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, maleItems);
final ArrayAdapter<String> femaleAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, femaleItems);
spinner = (Spinner) findViewById(R.id.spinner1);
spinner.setAdapter(maleAdapter);
spinner.setOnItemSelectedListener(this);
// Buttons
maleButton = (Button) findViewById(R.id.maleButton);
femaleButton = (Button) findViewById(R.id.femaleButton);
maleButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
spinner.setAdapter(maleAdapter);
}
});
femaleButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
spinner.setAdapter(femaleAdapter);
}
});
}
在我的 onItemSelected 上,我想根据按下的按钮更改发生的情况。
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
int position = spinner.getSelectedItemPosition();
SpinnerAdapter adap = spinner.getAdapter();
if (adap.equals(maleAdapter)) {
switch (position) {
case 0:
// do something only the maleAdapter does
break;
case 1:
// do something only the maleAdapter does
break;
case 2:
// do something only the maleAdapter does
break;
}
} else if (adap.equals(femaleAdapter)) {
switch (position) {
case 0:
// do something only the femaleAdapter does
break;
case 1:
// do something only the femaleAdapter does
break;
case 2:
// do something only the femaleAdapter does
break;
}
}
}
我的 onClick 方法运行良好,但适配器更改给我一个错误,我不知道为什么。
错误
01-25 04:11:18.873: E/AndroidRuntime(21871): FATAL EXCEPTION: main
01-25 04:11:18.873: E/AndroidRuntime(21871): java.lang.NullPointerException
01-25 04:11:18.873: E/AndroidRuntime(21871): at com.MainActivity.onItemSelected(MainActivity.java:117)
01-25 04:11:18.873: E/AndroidRuntime(21871): at android.widget.AdapterView.fireOnSelected(AdapterView.java:871)
01-25 04:11:18.873: E/AndroidRuntime(21871): at android.widget.AdapterView.access$200(AdapterView.java:42)
01-25 04:11:18.873: E/AndroidRuntime(21871): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:837)
01-25 04:11:18.873: E/AndroidRuntime(21871): at android.os.Handler.handleCallback(Handler.java:587)
01-25 04:11:18.873: E/AndroidRuntime(21871): at android.os.Handler.dispatchMessage(Handler.java:92)
01-25 04:11:18.873: E/AndroidRuntime(21871): at android.os.Looper.loop(Looper.java:130)
01-25 04:11:18.873: E/AndroidRuntime(21871): at android.app.ActivityThread.main(ActivityThread.java:3691)
01-25 04:11:18.873: E/AndroidRuntime(21871): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 04:11:18.873: E/AndroidRuntime(21871): at java.lang.reflect.Method.invoke(Method.java:507)
01-25 04:11:18.873: E/AndroidRuntime(21871): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
01-25 04:11:18.873: E/AndroidRuntime(21871): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
01-25 04:11:18.873: E/AndroidRuntime(21871): at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
标签: java android spinner adapter android-spinner