Позиция 0 ArrayAdapter / ListView не обнаруживается

Я хотел бы поместить изображение медали для позиций 1, 2, 3 и скрыть его для следующих предметов в arrayadapter в сочетании с listview.

Любопытно, что после тестирования кажется, что позиция возвращается правильно (индикатор Pin), и моя идея работает для позиций 1 и 2 (то есть пунктов 2 и 3), но не для позиции 0. Я думаю, прикрепленное изображение лучше объяснит.

Код находится под изображением.

Позиция 0 ArrayAdapter / ListView не обнаруживается

public class TopHorecaAdapter extends ArrayAdapter<TopHorecaElement> {

private final List<TopHorecaElement> mTopHorecas;
private final Context mContext;

TextView horeca_name;
TextView horeca_type;
TextView horeca_address;
TextView horeca_pins;

ImageView horeca_medal;

CircularImageView image;

public TopHorecaAdapter(@NonNull final Context context, @NonNull final List<TopHorecaElement> objects){
    super(context, R.layout.fragment_top_horecas, objects);
    mTopHorecas = objects;
    mContext = context;
}

@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull final ViewGroup parent){

    final TopHorecaElement topHorecaElement = mTopHorecas.get(position);
    if (convertView == null){
        convertView = LayoutInflater.from(mContext).inflate(R.layout.item_top_horeca, parent, false);
    }

    Integer pst = position;

    horeca_name = convertView.findViewById(R.id.tophoreca_name);
    horeca_type = convertView.findViewById(R.id.tophoreca_asl);
    horeca_address = convertView.findViewById(R.id.tophoreca_pinnumber);
    horeca_pins = convertView.findViewById(R.id.tophoreca_address);
    horeca_medal = convertView.findViewById(R.id.tophoreca_medal);

    horeca_name.setText(topHorecaElement.getBarName());
    horeca_pins.setText(topHorecaElement.getNbr() + " Pin'Ups");
    horeca_address.setText(pst.toString());
    horeca_type.setText("");

    horeca_medal.setImageResource(R.drawable.first);

    if (pst <= 0) {
        horeca_medal.setImageResource(R.drawable.first);
    } else if (pst == 1) {
        horeca_medal.setImageResource(R.drawable.second);
    } else if (pst == 2) {
        horeca_medal.setImageResource(R.drawable.third);
    } else if (pst > 2 && pst < mTopHorecas.size()){
        horeca_medal.setVisibility(INVISIBLE);
    } else {
        horeca_medal.setImageResource(R.drawable.first);
    }

    return convertView;

}

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

@Override
void initEvent(@Nullable final View view) { HorecaPinDataManager.getTopHoreca(PinUpApplication.getInstance().user.getCity());}

@Subscribe
public void onTopHorecaEventReceived(TopHorecasReceivedEvent event){
    try {
        if (!event.mTopHoreca.isEmpty()) {
            adapter = new TopHorecaAdapter(getActivity(), event.mTopHoreca);
            mTopHoreca.setAdapter(adapter);
        } else {
            HorecaPinDataManager.getAlltimeTopHoreca(PinUpApplication.getInstance().user.getCity());
        }
    } catch (IndexOutOfBoundsException | NullPointerException e){
        HorecaPinDataManager.getAlltimeTopHoreca(PinUpApplication.getInstance().user.getCity());
    }
}

@Subscribe
public void onTopAlltimeHorecaEventReceived(TopAlltimeHorecasReceivedEvent event){
    adapter = new TopHorecaAdapter(getActivity(), event.mTopHoreca);
    mTopHoreca.setAdapter(adapter);
}

Кажется, что если срабатывает только первое событие, значок показывает. Не работает только при срабатывании второго события (onAlltimeTopHorecaEvent).

Я почти уверен, что ошибка исходит из кода фрагмента, поскольку он работает для первого приема события (так что, если TopHorecasReceivedEvent не пуст, код ...) работает. Если он пуст, я снова вызываю свой API и получаю другие элементы, и именно здесь указанная проблема ..

Vanhaeren Thomas 01.12.2018 02:34
0
1
47
2

Ответы 2

Вы бы попробовали это?

try{
horeca_medal = (ImageView)getApplicationContext().findViewById(R.id.horeca_medal);
//Write your own reference.

horeca_medal.setImageResource(R.drawable.first);

    if (pst <= 0) {
        horeca_medal.setImageResource(R.drawable.first);
    } else if (pst == 1) {
        horeca_medal.setImageResource(R.drawable.second);
    } else if (pst == 2) {
        horeca_medal.setImageResource(R.drawable.third);
    } else if (pst > 2 && pst < mTopHorecas.size()){
        horeca_medal.setVisibility(View.INVISIBLE); //This edit
    } else {
        horeca_medal.setImageResource(R.drawable.first);
    }
}catch(Excaption ex)
{
android.util.Log.e("YourError", ex.getMessage());
}

Вы можете дать нам результат LogMessage?

Привет, похоже, к сожалению, сообщения об ошибке нет.

Vanhaeren Thomas 01.12.2018 01:52

изменение

Integer pst = position

к

int pst = position

должен решить вашу проблему.

Обновлено:

Хорошо, поэтому вы всегда устанавливаете свой образ на drawable.first перед тем, как начать.

horeca_medal.setImageResource(R.drawable.first);
if (pst == 1) {
    horeca_medal.setImageResource(R.drawable.second);
} else if (pst == 2) {
    horeca_medal.setImageResource(R.drawable.third);
} else if (pst > 2) {
    horeca_medal.setVisibility(INVISIBLE);
}

должно работать, а если нет, я понятия не имею, что происходит.

Спасибо за ответ. Я уже пробовал это раньше, и, к сожалению, это не работает.

Vanhaeren Thomas 01.12.2018 02:32

@VanhaerenThomas Отредактировано. Если не получается - сдаюсь: D

Mauro Curbelo 01.12.2018 02:51

Я действительно не понимаю, откуда это. В любом случае, я тоже пробовал ваш код, и он не работает. В этом нет никакого смысла. В любом случае большое спасибо!

Vanhaeren Thomas 01.12.2018 02:57

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