Пользовательский ArrayAdapter для Spinner getView () не вызывается

У меня проблема с настраиваемым адаптером массива. Я прочитал об этом все потоки в стеке и все еще не могу решить эту проблему. Я использовал код из этого вопроса (и он не работал, поэтому я внес небольшие изменения: Счетчик с настраиваемым ArrayAdapter для объектов, не отображающих выбранный элемент

Проблема в том, что я создаю свой адаптер и: 1. getCount показывает правильное значение (244) 2. getView не вызывается 3. Просмотр getDropdown тоже не вызывается.

Не могли бы вы помочь мне с этим?

Класс адаптера:

public class DishesFilterCustomArrayAdapter extends ArrayAdapter<Dish> {

private List<Dish> items;
private Context context;
private Activity activity;

public DishesFilterCustomArrayAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull List<Dish> objects) {
    super(context, resource, textViewResourceId, objects);
    this.items = objects;
    this.context = context;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    TextView v = (TextView) super.getView(position, convertView, parent);

    if (v == null) {
        v = new TextView(context);
    }
    v.setTextColor(context.getResources().getColor(R.color.blue_light));
    v.setText(items.get(position).dishName);

    return v;
}

@Override
public Dish getItem(int position) {
    return items.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        v = inflater.inflate(R.layout.payment_mode_payer_item, null);
    }
    TextView lbl = (TextView) v.findViewById(R.id.textViewForAdapter);
    lbl.setTextColor(context.getResources().getColor(R.color.blue_light));
    lbl.setText(items.get(position).dishName);

    return convertView;
}

@Override
public int getCount() {
    return items.size();
}

public List<Dish> getItems() {
    return items;
}

код из фрагмента:

        mDishList = new ArrayList<>();
        mDishList.addAll(getAllDishesSegregatedList(getAllDishesList()));
        mDishesAdapter = new DishesFilterCustomArrayAdapter(getContext(), R.layout.payment_mode_payer_item, R.id.textViewForAdapter, mDishList);
        //mDishesAdapter.add(new Dish(getString(R.string.filter_receipt_history_by_dish_name)));
        dishesFilterSpinner.setAdapter(mDishesAdapter);

Размер mDishList равен 244 и соответствует значению getCount ().

Вы уверены, что dishesFilterSpinner, на который вы устанавливаете Adapter, - это тот, который вы видите на экране? Например, если этот код Fragment находится в onCreateView(), вы уверены, что возвращаете View, на который вы звоните в findViewById(), чтобы получить dishesFilterSpinner?

Mike M. 26.03.2018 14:01

Как вы проверяли, что эти методы не вызываются? Добавьте Log.d (...) к каждому методу, запустите приложение, щелкните счетчик и посмотрите на свой logcat.

muminers 26.03.2018 14:09

Я проверил этот метод с помощью Log.d, я просто не разместил его здесь, поскольку он бесполезен. Майк М. благодарит за подсказку. Да, похоже, что у меня было представление с тем же идентификатором, для которого была установлена ​​видимость. Помимо того, что у меня были дополнительные ошибки в моем коде, я собираюсь отредактировать свой вопрос с изменениями. Еще раз, Майк М. большое спасибо за ваш вклад! Хорошего дня!

Jan Radzikowski 26.03.2018 14:12

@Jan: не могли бы вы отменить свое "решенное" изменение и добавить это как правильный ответ? Есть кнопка, позволяющая вам ответить на свой вопрос. Спасибо.

halfer 26.03.2018 14:23

Конечно вещь :) Забыл об этом

Jan Radzikowski 26.03.2018 15:05
0
5
1 189
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Задача решена. Первая ошибка заключалась в том, что у меня было два представления с одинаковым идентификатором, и я установил свой адаптер на тот, который не отображается.

Во-вторых, у меня были ошибки в коде кастомного адаптера. Выкладываю ниже.

public class DishesFilterCustomArrayAdapter extends ArrayAdapter<Dish> {

private List<Dish> items;
private Context context;

public DishesFilterCustomArrayAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull List<Dish> objects) {
    super(context, resource, textViewResourceId, objects);
    this.items = objects;
    this.context = context;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        v = inflater.inflate(R.layout.receipt_history_spinner_item, null);
    }
    TextView lbl = (TextView) v.findViewById(R.id.receiptHistorySpinnerItemTextView);
    lbl.setTextColor(context.getResources().getColor(R.color.blue_light));
    lbl.setText(items.get(position).dishName);

    return v;
}

@Override
public Dish getItem(int position) {
    return items.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        v = inflater.inflate(R.layout.receipt_history_spinner_item, null);
    }
    TextView lbl = (TextView) v.findViewById(R.id.receiptHistorySpinnerItemTextView);
    lbl.setTextColor(context.getResources().getColor(R.color.blue_light));
    lbl.setText(items.get(position).dishName);

    return v;
}

@Override
public int getCount() {
    return items.size();
}

public List<Dish> getItems() {
    return items;
}

Mike.M благодарит вас за помощь!

Другие вопросы по теме