微调器提示不显示
Spinner prompt doesn't show up
我想使用像 "Select City" 这样的微调提示。我确实在 string layout use in layout android:prompt="@string/select_city"
中为 select_city
设置了一个值,但它不起作用。也试过用sp_city.setPrompt("Select City");
也没用。
我的问题是什么?我该如何修复它并设置提示?
布局:
<Spinner
android:id="@+id/spinner_poi_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/btn_dropdown"
android:spinnerMode="dropdown"/>
Class:
public class FirstPOIPreference extends DialogPreference {
private Spinner sp_city;
private ArrayAdapter<String> adapter;
private POI poiDialog = new POI();
public FirstPOIPreference(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setPersistent(false);
setDialogLayoutResource(R.layout.pref_poi_dialog);
setPositiveButtonText(android.R.string.ok);
setNegativeButtonText(android.R.string.cancel);
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
initViews(view);
}
private void initViews(View view) {
sp_city = (Spinner) view.findViewById(R.id.spinner_poi_city);
sp_city.setPrompt("City");
String[] arrayCity = new String[]{"Erie", "Pittsburgh", "Cleveland", "Buffalo", "Niagara Falls", "Jamestown"};
adapter = new ArrayAdapter <> (this.getContext(), android.R.layout.simple_spinner_dropdown_item, arrayCity);
sp_city.setAdapter(adapter);
sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView <?> parentView, View selectedItemView, int position, long id) {
poiDialog.setCity(sp_city.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView <?> parentView) {
}
});
}
}
我认为更好的解决方案是使用 "Select City" 作为您将添加到微调器的数组的第一项。所以默认情况下它会显示 Select 城市。您可以通过检查微调器选择的位置来检查是否选择了城市。如果位置为 0,则显示 toast 或类似 "Please select city."
的内容
你可以这样做,我已经做到了一些棘手的事情 way.it 可以帮助你
private void initViews(View view) {
sp_city = (Spinner) view.findViewById(R.id.spinner_poi_city);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if (position == getCount()) {
((TextView) v.findViewById(android.R.id.text1)).setText("");
((TextView) v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed"
}
return v;
}
@Override
public int getCount() {
return super.getCount() - 1; // you dont display last item. It is used as hint.
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.add("Erie");
adapter.add("Pittsburgh");
adapter.add("Cleveland");
adapter.add("Buffalo");
adapter.add("Niagara Falls");
adapter.add("Jamestown");
adapter.add("Select City"); //This is the text that will be displayed as hint.
sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
String spinnerValue = String.valueOf(sp_city.getSelectedItem().toString());
if (!spinnerValue.equalsIgnoreCase("Select City")) {
//do your code
Toast.makeText(this, sp_city.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
}
});
sp_city.setAdapter(adapter);
sp_city.setSelection(adapter.getCount()); //set the hint the default selection so it appears on launch.
}
您将提示误认为是默认文本。
点击微调器,您将看到 "select City" 作为标题
提示用于在下拉弹出窗口上显示标题,而不是默认文本。
如果你想select微调器的默认值
当您尚未 select 从微调器下拉列表中输入任何值时。
那么你必须使用
NothingSelectedSpinnerAdapter
How to make an Android Spinner with initial text "Select One"
我想使用像 "Select City" 这样的微调提示。我确实在 string layout use in layout android:prompt="@string/select_city"
中为 select_city
设置了一个值,但它不起作用。也试过用sp_city.setPrompt("Select City");
也没用。
我的问题是什么?我该如何修复它并设置提示?
布局:
<Spinner
android:id="@+id/spinner_poi_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/btn_dropdown"
android:spinnerMode="dropdown"/>
Class:
public class FirstPOIPreference extends DialogPreference {
private Spinner sp_city;
private ArrayAdapter<String> adapter;
private POI poiDialog = new POI();
public FirstPOIPreference(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setPersistent(false);
setDialogLayoutResource(R.layout.pref_poi_dialog);
setPositiveButtonText(android.R.string.ok);
setNegativeButtonText(android.R.string.cancel);
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
initViews(view);
}
private void initViews(View view) {
sp_city = (Spinner) view.findViewById(R.id.spinner_poi_city);
sp_city.setPrompt("City");
String[] arrayCity = new String[]{"Erie", "Pittsburgh", "Cleveland", "Buffalo", "Niagara Falls", "Jamestown"};
adapter = new ArrayAdapter <> (this.getContext(), android.R.layout.simple_spinner_dropdown_item, arrayCity);
sp_city.setAdapter(adapter);
sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView <?> parentView, View selectedItemView, int position, long id) {
poiDialog.setCity(sp_city.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView <?> parentView) {
}
});
}
}
我认为更好的解决方案是使用 "Select City" 作为您将添加到微调器的数组的第一项。所以默认情况下它会显示 Select 城市。您可以通过检查微调器选择的位置来检查是否选择了城市。如果位置为 0,则显示 toast 或类似 "Please select city."
的内容你可以这样做,我已经做到了一些棘手的事情 way.it 可以帮助你
private void initViews(View view) {
sp_city = (Spinner) view.findViewById(R.id.spinner_poi_city);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if (position == getCount()) {
((TextView) v.findViewById(android.R.id.text1)).setText("");
((TextView) v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed"
}
return v;
}
@Override
public int getCount() {
return super.getCount() - 1; // you dont display last item. It is used as hint.
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.add("Erie");
adapter.add("Pittsburgh");
adapter.add("Cleveland");
adapter.add("Buffalo");
adapter.add("Niagara Falls");
adapter.add("Jamestown");
adapter.add("Select City"); //This is the text that will be displayed as hint.
sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
String spinnerValue = String.valueOf(sp_city.getSelectedItem().toString());
if (!spinnerValue.equalsIgnoreCase("Select City")) {
//do your code
Toast.makeText(this, sp_city.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
}
});
sp_city.setAdapter(adapter);
sp_city.setSelection(adapter.getCount()); //set the hint the default selection so it appears on launch.
}
您将提示误认为是默认文本。 点击微调器,您将看到 "select City" 作为标题
提示用于在下拉弹出窗口上显示标题,而不是默认文本。
如果你想select微调器的默认值 当您尚未 select 从微调器下拉列表中输入任何值时。 那么你必须使用
NothingSelectedSpinnerAdapter
How to make an Android Spinner with initial text "Select One"