性別選択のドロップダウンを表示したい。文字列配列を
String arr[]=new String[]{"male","female"};
しかし、問題は"male"
の値でデフォルトの選択を表示することであり、デフォルト値として"Gender"
を表示したいです。位置0の配列に「性別」を渡すと、ドロップダウンにも表示されます。ヒントとして「性別」が必要ですが、ドロップダウンに表示しないでください。
誰も私にこれを行う方法を教えてもらえますか。前もって感謝します。
Spinner sp = (Spinner)findViewById(R.id.spinner);
sp.setSelection(pos);
ここで、posは整数です(配列項目の位置)
配列は以下のようなものですpos = 0;
String str[] = new String{"Select Gender","male", "female" };
その後、onItemSelected
@Override
public void onItemSelected(AdapterView<?> main, View view, int position,
long Id) {
if(position > 0){
// get spinner value
}else{
// show toast select gender
}
}
ArrayAdapter
を拡張し、getView
メソッドをオーバーライドすることで解決策を見つけました。
import Android.content.Context;
import Android.support.annotation.NonNull;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ArrayAdapter;
import Android.widget.Spinner;
import Android.widget.TextView;
/**
* A SpinnerAdapter which does not show the value of the initial selection initially,
* but an initialText.
* To use the spinner with initial selection instead call notifyDataSetChanged().
*/
public class SpinnerAdapterWithInitialText<T> extends ArrayAdapter<T> {
private Context context;
private int resource;
private boolean initialTextWasShown = false;
private String initialText = "Please select";
/**
* Constructor
*
* @param context The current context.
* @param resource The resource ID for a layout file containing a TextView to use when
* instantiating views.
* @param objects The objects to represent in the ListView.
*/
public SpinnerAdapterWithInitialText(@NonNull Context context, int resource, @NonNull T[] objects) {
super(context, resource, objects);
this.context = context;
this.resource = resource;
}
/**
* Returns whether the user has selected a spinner item, or if still the initial text is shown.
* @param spinner The spinner the SpinnerAdapterWithInitialText is assigned to.
* @return true if the user has selected a spinner item, false if not.
*/
public boolean selectionMade(Spinner spinner) {
return !((TextView)spinner.getSelectedView()).getText().toString().equals(initialText);
}
/**
* Returns a TextView with the initialText the first time getView is called.
* So the Spinner has an initialText which does not represent the selected item.
* To use the spinner with initial selection instead call notifyDataSetChanged(),
* after assigning the SpinnerAdapterWithInitialText.
*/
@Override
public View getView(int position, View recycle, ViewGroup container) {
if(initialTextWasShown) {
return super.getView(position, recycle, container);
} else {
initialTextWasShown = true;
LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(resource, container, false);
((TextView) view).setText(initialText);
return view;
}
}
}
Android Spinnerの初期化時に行うことは、T[] objects
内のすべてのアイテムに対してgetViewを呼び出す前に、選択したアイテムに対してgetViewを呼び出します。SpinnerAdapterWithInitialText
はTextView
initialText
では、最初に呼び出されます。それ以外の場合は、getView
のArrayAdapter
メソッドであるsuper.getView
を呼び出します。これは、スピナーを使用している場合に呼び出されます通常は。
ユーザーがスピナーアイテムを選択したかどうか、またはスピナーがまだinitialText
を表示しているかどうかを確認するには、selectionMade
を呼び出して、アダプターが割り当てられているスピナーを渡します。
スピナーはヒントをサポートしていません。カスタムスピナーアダプターを作成することをお勧めします。
このリンクを確認してください: https://stackoverflow.com/a/13878692/1725748