使用适配器的Listview更新问题

时间:2016-02-15 18:03:48

标签: android listview baseadapter

在我的屏幕启动应用程序中,我点击了一个带有默认城市数据的网络服务,它会返回响应。并使用它来响应我的应用程序中的更新列表视图。这件事情很好。现在我再次点击另一个Web服务并获取其数据。此服务中的所有内容都与前一个类似,因此我也使用相同的适配器和列表视图。但问题是listview仍然显示来自先前Web服务的数据,而不是更新的数据。在重新填充数据之前我已经清除了列表,我也通知适配器,但它仍然显示旧数据。这是代码

import {} from

和解析器代码

public class VenueAdapter extends BaseAdapter {
    Context context;
    LayoutInflater layoutInflater;
    // List<InterestAndLanguageBean> interestAndLanguageBeans=new ArrayList<>();
    List<VenueDefaultBean> venueList = new ArrayList<>();

    public VenueAdapter(Context context, List<VenueDefaultBean> imagesList) {
        this.context = context;
        this.venueList = imagesList;
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        Context c = null;
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            LayoutInflater inflater = getLayoutInflater(null);
            vi = inflater.inflate(R.layout.venue_row, parent, false);
            holder.tv_address = (TextView) vi.findViewById(R.id.tv_address);
            holder.tv_type = (TextView) vi.findViewById(R.id.tv_type);
            holder.tv_location = (TextView) vi.findViewById(R.id.tv_location);
            holder.tv_fees = (TextView) vi.findViewById(R.id.tv_fees);
            holder.iv_venue = (ImageView) vi.findViewById(R.id.iv_venue);
            vi.setTag(holder);
        } else {
            holder = (ViewHolder) vi.getTag();
        }
        holder.tv_address.setText(venueList.get(position).getLocation_Name());
        holder.tv_type.setText(venueList.get(position).getVenue_type_names());
        holder.tv_location.setText(venueList.get(position).getLocation_Name());
        holder.tv_fees.setText(venueList.get(position).getVenue_fees());
        Glide.with(getActivity()).load(venueList.get(position).getVeneImage()).placeholder(R.drawable.venue_1).into(holder.iv_venue);
        return vi;
    }

}

2 个答案:

答案 0 :(得分:0)

为什么不添加方法来设置适配器本身的文本?那么一切都将在那个实例上设置,你不会从另一个地方获得信息。

答案 1 :(得分:0)

1)确定你正在调用

VenueAdapter venueAdapter = new VenueAdapter(getActivity(), venueDefaultBeanArrayList);
        venueAdapter.notifyDataSetChanged();
        lv_venue.setAdapter(venueAdapter);
来自UI Thread的

2) 您需要提供正确的getItemId(int position)(如果您没有某种身份证明,只需返回该职位)