アプリにスピナーを実装しました。学校のリストを表示していますが、ユーザーが学校を選択できるように、デフォルト値/プロンプトが必要です。また、リストアイテムとしてプロンプトを表示せずにこれを実行したいと思います。何か案は?
これまでの私のスピナーコードは次のとおりです。
selectSchoolSpinner = (Spinner) findViewById(R.id.select_school_spinner);
spinnerSchoolList = new ArrayList<String>();
spinnerSchoolList.add("Please select School");
//I don't want to have a Prompt like the latter
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,
Android.R.layout.simple_spinner_item, spinnerSchoolList);
spinnerAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
selectSchoolSpinner.setAdapter(spinnerAdapter);
コンストラクターで目的のテキストの文字列を使用してカスタムArrayAdapterを作成する必要があります。次に、配列の最初の要素をデフォルトのテキストに切り替え、ユーザーがスピナーをクリックした後、元の配列に戻す必要があります。
例:
アクティビティクラス:
public class SpinnerActivity extends Activity {
Spinner spinner;
String defaultTextForSpinner = "Your deafult text here";
String[] arrayForSpinner = {"One", "Two", "Three"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
spinner = (Spinner) findViewById(R.id.your_spinner);
spinner.setAdapter(new CustomSpinnerAdapter(this, R.layout.spinner_row, arrayForSpinner, defaultTextForSpinner));
}
}
CustomSpinnerAdapterクラス:
public class CustomSpinnerAdapter extends ArrayAdapter<String>{
Context context;
String[] objects;
String firstElement;
boolean isFirstTime;
public CustomSpinnerAdapter(Context context, int textViewResourceId, String[] objects, String defaultText) {
super(context, textViewResourceId, objects);
this.context = context;
this.objects = objects;
this.isFirstTime = true;
setDefaultText(defaultText);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if(isFirstTime) {
objects[0] = firstElement;
isFirstTime = false;
}
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
notifyDataSetChanged();
return getCustomView(position, convertView, parent);
}
public void setDefaultText(String defaultText) {
this.firstElement = objects[0];
objects[0] = defaultText;
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.spinner_row, parent, false);
TextView label = (TextView) row.findViewById(R.id.spinner_text);
label.setText(objects[position]);
return row;
}
}
SetSelectionメソッドを試して、デフォルトのテキストを設定します。
spinner.setSelection(adapter.getPosition(DEFAULT_CURRENCY_TYPE))
そして、このリンクを見てください: Android最初のテキストが「SelectOne」のスピナー を作成する方法。これは非常に便利です(@aaronvargasの回答が必要です)。
@Override
protected void onPostExecute(PositionBean[] result) {
String[] spinnerArray = new String[result.length];
if(result!=null) {
for (int i = 0; i < result.length; i++) {
String positionName = result[i].getPositionName();
spinnerArray[i] = result[i].getPositionName();
}
ArrayList<String> positionList = new ArrayList<String>(Arrays.asList(spinnerArray));
positionList.add(0,"select");
String [] positions = positionList.toArray(new String[positionList.size()]);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(EngineActivity.this, Android.R.layout.simple_spinner_item,
positions);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
positionSpinner.setAdapter(adapter);
}else{
Log.d("NULL", "This is null");
}
}