Страницы

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

понедельник, 30 марта 2020 г.

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

#android #ui #android_spinner


Можно ли как-нибудь изменить кастомный макет для 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. Как это можно
сделать?
    


Ответы

Ответ 1



Создала кастомный адаптер для 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; } } В итоге получила именно то, что хотела:

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

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