我想显示性别选择的下拉菜单。我传递了一个字符串数组作为
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
. SpinnerAdapterWithInitialText
返回 aTextView
和,第initialText
一次调用它。如果您正常使用 Spinner,则它调用的所有其他时间都是调用super.getView
的getView
方法。ArrayAdapter
要确定用户是否选择了微调器项目,或者微调器是否仍显示initialText
,请调用selectionMade
并移交适配器分配给的微调器。
微调器不支持提示,我建议您制作自定义微调器适配器。
试试下面:
<Spinner
android:id="@+id/YourSpinnerId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="Gender" />