Фильтрация ListView с помощью TextWatcher получает исключение IndexOutOfBoundsException

Я пробовал этот Filter ListView с помощью arrayadapter и этот Список фильтров, чтобы получить фильтруемый список, но я продолжаю получать это ошибка:

Процесс: br.com.soutsapp.user.souts, PID: 315 java.lang.IndexOutOfBoundsException: неверный индекс 0, размер равен 0 в java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) в java.util.ArrayList. get(ArrayList.java:308) на br.com.soutsapp.user.souts.userInterface.adapter.EstablishmentAdapter.getView(EstablishmentAdapter.java:54)

Эта ошибка возникает на моем getView:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    br.com.soutsapp.user.souts.userInterface.viewHolder.Establishment viewHolder;
    View rowView = convertView;
    if(convertView == null){
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = layoutInflater.inflate(R.layout.establishment_row, null, true);

        viewHolder = new br.com.soutsapp.user.souts.userInterface.viewHolder.Establishment();
        viewHolder.ivIcon = (ImageView) rowView.findViewById(R.id.iv_icon);
        viewHolder.tvClosingTime = (TextView) rowView.findViewById(R.id.tv_closing_time);
        viewHolder.tvOpeningTime = (TextView) rowView.findViewById(R.id.tv_opening_time);
        viewHolder.tvDistance = (TextView) rowView.findViewById(R.id.tv_place_distance);
        viewHolder.tvName = (TextView) rowView.findViewById(R.id.tv_name);
        viewHolder.tvWorkingStatus = (TextView) rowView.findViewById(R.id.tv_working_status);
        viewHolder.tvType = (TextView) rowView.findViewById(R.id.tv_type);

        rowView.setTag(viewHolder);
    }
    else {
        viewHolder = (br.com.soutsapp.user.souts.userInterface.viewHolder.Establishment) convertView.getTag();
    }

    Establishment establishment = establishmentList.get(position); //Error here
    viewHolder.ivIcon.setImageDrawable(establishment.getIcon());
    viewHolder.tvClosingTime.setText(establishment.getClosingTime().toString("HH:mm"));
    viewHolder.tvOpeningTime.setText(establishment.getOpeningTime().toString("HH:mm"));
    viewHolder.tvName.setText(establishment.getName());
    viewHolder.tvType.setText(establishment.getType());

    viewHolder.tvWorkingStatus.setText(establishment.getWorkingStatusLabel());
    viewHolder.tvWorkingStatus.setTextColor(getColorWorkingStatusLabel(establishment.isWorkingStatus()));

    viewHolder.tvDistance.setText(formatDistance(establishment.getDistance()));

    rowView.setId((int)establishment.getId());
    return rowView;
}

И я не мог понять, как это решить, можете ли вы показать мне путь? Спасибо!


person guisantogui    schedule 25.01.2016    source источник
comment
Покажите метод getCount() и убедитесь, что он возвращает establishmentList.size из getCount.   -  person ρяσѕρєя K    schedule 25.01.2016
comment
Добавьте код, связанный с establishmentList, пожалуйста! Похоже, что establishmentList не был инициирован, как ожидалось.   -  person T D Nguyen    schedule 25.01.2016
comment
что возвращает ваш getCount() ??   -  person Surabhi Singh    schedule 25.01.2016
comment
Размер списка EstablishList нулевой, и вы можете попытаться получить данные из нулевого индекса, поэтому просто проверьте размер списка ur.   -  person Darshan Kachhadiya    schedule 25.01.2016


Ответы (2)


Переопределите метод getCount и верните размер списка. Внутри вашего класса адаптера.

person Krishna    schedule 25.01.2016
comment
Это решит проблему! - person guisantogui; 26.01.2016

Где вы заполняете данные? Я имею в виду, где вы установили цикл for для добавления данных?

person AbhayBohra    schedule 25.01.2016