少し考えた後、あなたの目標を達成する方法を思いついたと思います。これには、カスタム アダプターの作成と、スピナーのアイテムが選択されているかどうかを判断するためのフラグの設定/維持が含まれます。この方法を使用すると、偽のデータ (空の文字列) を作成/使用する必要はありません。
基本的に、アダプター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, // Use our custom adapter
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; // Set adapter flag that something
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;
}
}