为什么我从微调项中得到空值?
Why am I getting null from spinner item?
我是 Android 的新人。当我尝试获取微调器的选定项目时,我得到的是空值。
我尝试设计两个微调器,当单击按钮时,将微调器的选定项目之一写入文本字段。但是我越来越空了。能解释一下原因吗?
public class EERActivity extends AppCompatActivity implements
OnItemSelectedListener {
private Spinner spinner1;
private Spinner spinner2;
private String[] array1= {"xx","yy"};
private String[] array2= {"x2", "y2"};
private ArrayAdapter<String> dataAdapterForArray1;
private ArrayAdapter<String> dataAdapterForArray2;
String selected1;
String selected2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_eer);
spinner1 = (Spinner)findViewById(R.id.spinner2);
spinner2 = (Spinner)findViewById(R.id.spinner3);
dataAdapterForArray1 = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, array1);
//and 2 is here..//
spinner1.setAdapter(dataAdapterForArray1);
spinner2.setAdapter(...filled...);
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
if(parent.getId() == R.id.spinner2) {
selected1 = spinner1.getSelectedItem().toString();
}
else if(parent.getId() == R.id.spinner3){
selected2 = spinner2.getSelectedItem().toString();
}
selectedSpinner1 = spinner1.getSelectedItem().toString();
selectedSpinner2 = spinner2.getSelectedItem().toString();
}
public void onNothingSelected(AdapterView<?> arg0) {
}
public void run (View view){
textView.setText("Result: " + selected1); }
我希望输出是从 spinner1 中选择的,但结果为空。
很可能是在微调器组件中实际更改值之前触发了事件。要解决这个问题,您可以添加空检查。尝试在 "onItemSelected" 方法的第一行添加以下内容:
if ((parent.getId() == R.id.spinner2 && spinner1.getSelectedItem() == null) || (parent.getId() == R.id.spinner3 && spinner2.getSelectedItem() == null)) {
return ;
}
另外,我不确定你是否发布了整个代码,但这看起来是错误的:
spinner1 = (Spinner)findViewById(R.id.spinner2);
spinner2 = (Spinner)findViewById(R.id.spinner3);
我是 Android 的新人。当我尝试获取微调器的选定项目时,我得到的是空值。
我尝试设计两个微调器,当单击按钮时,将微调器的选定项目之一写入文本字段。但是我越来越空了。能解释一下原因吗?
public class EERActivity extends AppCompatActivity implements
OnItemSelectedListener {
private Spinner spinner1;
private Spinner spinner2;
private String[] array1= {"xx","yy"};
private String[] array2= {"x2", "y2"};
private ArrayAdapter<String> dataAdapterForArray1;
private ArrayAdapter<String> dataAdapterForArray2;
String selected1;
String selected2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_eer);
spinner1 = (Spinner)findViewById(R.id.spinner2);
spinner2 = (Spinner)findViewById(R.id.spinner3);
dataAdapterForArray1 = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, array1);
//and 2 is here..//
spinner1.setAdapter(dataAdapterForArray1);
spinner2.setAdapter(...filled...);
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
if(parent.getId() == R.id.spinner2) {
selected1 = spinner1.getSelectedItem().toString();
}
else if(parent.getId() == R.id.spinner3){
selected2 = spinner2.getSelectedItem().toString();
}
selectedSpinner1 = spinner1.getSelectedItem().toString();
selectedSpinner2 = spinner2.getSelectedItem().toString();
}
public void onNothingSelected(AdapterView<?> arg0) {
}
public void run (View view){
textView.setText("Result: " + selected1); }
我希望输出是从 spinner1 中选择的,但结果为空。
很可能是在微调器组件中实际更改值之前触发了事件。要解决这个问题,您可以添加空检查。尝试在 "onItemSelected" 方法的第一行添加以下内容:
if ((parent.getId() == R.id.spinner2 && spinner1.getSelectedItem() == null) || (parent.getId() == R.id.spinner3 && spinner2.getSelectedItem() == null)) {
return ;
}
另外,我不确定你是否发布了整个代码,但这看起来是错误的:
spinner1 = (Spinner)findViewById(R.id.spinner2);
spinner2 = (Spinner)findViewById(R.id.spinner3);