Можно ли как-нибудь изменить кастомный макет для Spinner'a после его создания?
Например, у меня есть Spinner, макет которого состоит из TextView и ImageView
наполнение его выглядит так:
Spinner spinner = findViewById(R.id.spinner_sorting);
ArrayAdapter
и в итоге Spinner выглядит следующим образом:
А мне хотелось бы изменить каждую вторую ImageView в этом Spinnere. Как это можно сделать?
Ответ
Создала кастомный адаптер для Spinner-a:
public class SortingSpinnerAdapter extends ArrayAdapter
public SortingSpinnerAdapter(@NonNull Context context, int resource, int textViewResourceId, String[] data) {
super(context, resource, textViewResourceId, data);
inflater = LayoutInflater.from(context);
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return createView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return createView(position, convertView, parent);
}
private View createView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.spinner_row, parent, false);
holder = new ViewHolder();
holder.textView = convertView.findViewById(R.id.tv_sorting);
holder.imageView = convertView.findViewById(R.id.iv_arrow);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
onBindViewHolder(holder, position);
return convertView;
}
private void onBindViewHolder(ViewHolder holder, int pos) {
holder.textView.setText(data[pos]);
if (pos % 2 == 0) {
holder.imageView.setImageDrawable(context.getResources().getDrawable(R.drawable.arrow_downward));
} else {
holder.imageView.setImageDrawable(context.getResources().getDrawable(R.drawable.arrow_upward));
}
}
static class ViewHolder {
TextView textView;
ImageView imageView;
}
}
В итоге получила именно то, что хотела:
Комментариев нет:
Отправить комментарий