Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Изменение кастомного макета для Spinner'a после его создания

Можно ли как-нибудь изменить кастомный макет для Spinner'a после его создания? Например, у меня есть Spinner, макет которого состоит из TextView и ImageView




наполнение его выглядит так:
Spinner spinner = findViewById(R.id.spinner_sorting); ArrayAdapter spinnerAdapter = new ArrayAdapter(this, R.layout.spinner_row, R.id.tv_sorting, getResources().getStringArray(R.array.sorting_array)); spinner.setAdapter(spinnerAdapter);
и в итоге Spinner выглядит следующим образом:

А мне хотелось бы изменить каждую вторую ImageView в этом Spinnere. Как это можно сделать?


Ответ

Создала кастомный адаптер для Spinner-a:
public class SortingSpinnerAdapter extends ArrayAdapter { private LayoutInflater inflater; private Context context; private String[] data;
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; } }
В итоге получила именно то, что хотела:

Комментариев нет:

Отправить комментарий