java - 使用 TextWatcher 过滤 ListView 会出现 IndexOutOfBoundsException

标签 java android listview textwatcher

我已经尝试过这个Filter ListView with arrayadapter ,还有这个Filter List链接,以实现可过滤的列表,但我不断收到此错误:

Process: br.com.soutsapp.user.souts, PID: 315 java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at 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;
}

我不知道如何解决这个问题,你能告诉我方法吗?谢谢!

最佳答案

重写 getCount 方法并返回列表大小。在你的适配器类中。

关于java - 使用 TextWatcher 过滤 ListView 会出现 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990388/

相关文章:

android - RingtoneManager 类型中的方法 setActualDefaultRingtoneUri(Context, int, Uri) 不适用于参数 OnItemClickListener

java - 有人可以向我介绍哈密顿循环吗?

android - Android上最 "death-resistant"的组件是什么?

java - Android 构建错误 com.google.firebase :firebase-core:16. 0.8

java - 将数据从 Android 发送到笔记本电脑

android - 使用 ViewHolder 的 ListActivty 的 BaseAdapter.getView() - Android

android - 如何创建带有 Assets html 文件链接的 ListView ?

java - 我有一个 for 循环,在继续之前不等待输入

java - 使用java根据文件中的上一个和下一个单词替换单词

java - 根据文件的下一行插入或更新数据库