经过一番思考,我相信我已经想到了一种方法来实现你的目标。它涉及创建一个自定义适配器并设置/维护一个标志来确定是否选择了下拉列表中的项目。使用这种方法,您不需要创建/使用虚假数据(空字符串)。
基本上,适配器的getView方法设置了关闭的下拉列表的文本。因此,如果您覆盖它并在其中设置条件,则可以在启动时具有空白字段,并在进行选择后将其显示在关闭的下拉列表框中。唯一的问题是您需要记住在需要在关闭的下拉列表中查看值时设置标志。
我创建了一个小的示例程序(下面是代码)。
请注意,我仅添加了我需要的单个构造函数以用于我的示例。您可以实现所有标准ArrayAdapter构造函数或仅实现您需要的构造函数。
SpinnerTest.java
public class SpinnerTestActivity extends Activity {
private String[] planets = { "Mercury", "Venus", "Earth", "Mars",
"Jupiter", "Saturn", "Uranus", "Neptune" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
CustomAdapter adapter = new CustomAdapter(this,
android.R.layout.simple_spinner_item, planets);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
CustomAdapter.flag = true;
has been chosen
}
});
}
}
CustomAdapter.java
public class CustomAdapter extends ArrayAdapter {
private Context context;
private int textViewResourceId;
private String[] objects;
public static boolean flag = false;
public CustomAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
this.context = context;
this.textViewResourceId = textViewResourceId;
this.objects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = View.inflate(context, textViewResourceId, null);
if (flag != false) {
TextView tv = (TextView) convertView;
tv.setText(objects[position]);
}
return convertView;
}
}