Как отключить элемент в Spinner
Можно ли отображать отдельные записи в списке Spinner как отключенные?
Т.е. я хочу всегда отображать счетчик с четырьмя входами (например, север, юг, восток и запад), но я хочу, чтобы можно было отключить любой из них, чтобы он выглядел серым и недоступным.
Возможно ли это, или мне придется каждый раз воссоздавать список, оставляя недопустимые записи?
Ответы
Ответ 1
// Create spinner month, and disable month < today
List<CharSequence> listMonth = new ArrayList<CharSequence>();
for (int m = 0; m < 12; m++) {
if (m < 9) {
listMonth.add("0" + (m + 1));
} else {
listMonth.add("" + (m + 1));
}
}
// Create spinner item
adapterMonth = new ArrayAdapter<CharSequence>(this,
R.layout.layout_spinner_item, listMonth) {
// Disable click item < month current
@Override
public boolean isEnabled(int position) {
// TODO Auto-generated method stub
if (year <= max_year && position < max_month - 1) {
return false;
}
return true;
}
// Change color item
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
View mView = super.getDropDownView(position, convertView, parent);
TextView mTextView = (TextView) mView;
if (year <= max_year && position < max_month - 1) {
mTextView.setTextColor(Color.GRAY);
} else {
mTextView.setTextColor(Color.BLACK);
}
return mView;
}
};
adapterMonth
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spn2.setAdapter(adapterMonth);
Ответ 2
Кто-то только что опубликовал решение вашей проблемы, см. этот старый пост.
Ответ 3
public class MySpinnerAdapter extends BaseAdapter {
@Override
public void isEnabled(int position) {
return getItem(position).isEnabled();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.item, null);
}
if(!isEnabled(position)) {
convertView.setEnabled(false);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//NO-OP: Just intercept click on disabled item
}
});
}
return convertView;
}
}
Ответ 4
Возможно ли это
Это не так. То, как вы делаете это с ListView
, включает areAllItemsEnabled()
и isEnabled()
. Однако это методы интерфейса ListAdapter
, а не интерфейс SpinnerAdapter
. Поэтому я подозреваю, что они будут проигнорированы Spinner
.
Ответ 5
class SpinnerAdapter(context: Context, resource: Int, list: ArrayList<String>)
: ArrayAdapter<String>(context, resource, list) {
override fun isEnabled(position: Int): Boolean {
// select position to disable
return position != 0
}
}