#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; } } В итоге получила именно то, что хотела:
Комментариев нет:
Отправить комментарий