Android 使用适配器的Listview更新问题

Android 使用适配器的Listview更新问题,android,listview,baseadapter,Android,Listview,Baseadapter,在我的应用程序在屏幕上启动时,我点击了一个带有默认城市数据的web服务,它会返回响应。并用它来响应我的应用程序中的更新列表视图。这个东西工作正常。现在,我再次访问另一个web服务并获取其数据。此服务中的所有内容都与前一个类似,因此我也使用相同的适配器和listview。但问题是listview仍然显示来自以前web服务的数据,而不是更新的web服务的数据。在再次填充数据之前,我已经清除了列表,并且我已经通知了适配器,但是它仍然显示旧数据。这是密码 public class VenueAdapte

在我的应用程序在屏幕上启动时,我点击了一个带有默认城市数据的web服务,它会返回响应。并用它来响应我的应用程序中的更新列表视图。这个东西工作正常。现在,我再次访问另一个web服务并获取其数据。此服务中的所有内容都与前一个类似,因此我也使用相同的适配器和listview。但问题是listview仍然显示来自以前web服务的数据,而不是更新的web服务的数据。在再次填充数据之前,我已经清除了列表,并且我已经通知了适配器,但是它仍然显示旧数据。这是密码

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;
    }

}
公共类VenueAdapter扩展了BaseAdapter{
语境;
LayoutInflater LayoutInflater;
//List interestAndLanguageBeans=new ArrayList();
List-venueList=new-ArrayList();
public VenueAdapter(上下文,列表图像列表){
this.context=上下文;
this.venueList=imagesList;
layoutInflater=(layoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
返回venueList.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图vi=转换视图;
上下文c=null;
ViewHolder=null;
if(convertView==null){
holder=新的ViewHolder();
LayoutInflater充气机=getLayoutInflater(空);
vi=充气机。充气(R.layout.vention_行,父级,假);
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_费用=(TextView)vi.findviewbyd(R.id.tv_费用);
holder.iv_场馆=(ImageView)vi.findViewById(R.id.iv_场馆);
vi.setTag(支架);
}否则{
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.get场地费());
使用(getActivity()).load(venueList.get(position).getVeneImage()).placeholder(R.drawable.venue_1)滑动到(holder.iv_场地);
返回vi;
}
}
和解析器代码

public void parseVenueResponse(String result) {
    if (venueDefaultBeanArrayList.size()>0)
    {
        venueDefaultBeanArrayList.clear();
    }
    try {
        JSONObject jsonObject = new JSONObject(result);
        JSONArray jsonArray = jsonObject.getJSONArray("response");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject object = jsonArray.getJSONObject(i);
            String venue_Id = object.getString("venue_Id");
            String venue_Name = object.getString("venue_Name");
            String venue_city_id = object.getString("venue_city_id");
            String city_Name = object.getString("city_Name");
            String location_id = object.getString("location_id");
            String location_Name = object.getString("location_Name");
            String venue_type_names = object.getString("venue_type_names");
            String venue_fees = object.getString("venue_fees");
            String veneImage = object.getString("veneImage");
            venueDefaultBeanArrayList.add(new VenueDefaultBean(venue_Id, venue_Name, venue_city_id, city_Name, location_id, location_Name, venue_type_names
                    , venue_fees, veneImage));
        }
        VenueAdapter venueAdapter = new VenueAdapter(getActivity(), venueDefaultBeanArrayList);
        venueAdapter.notifyDataSetChanged();
        lv_venue.setAdapter(venueAdapter);

    } catch (JSONException e) {
        e.printStackTrace();
    }
}
public void parseVenueResponse(字符串结果){
如果(venueDefaultBeanArrayList.size()>0)
{
venueDefaultBeanArrayList.clear();
}
试一试{
JSONObject JSONObject=新JSONObject(结果);
JSONArray JSONArray=jsonObject.getJSONArray(“响应”);
for(int i=0;i
为什么不添加在适配器本身上设置文本的方法?然后,将在该实例上设置所有内容,并且您将无法从其他位置获取信息。

1)您确定正在调用

VenueAdapter venueAdapter = new VenueAdapter(getActivity(), venueDefaultBeanArrayList);
        venueAdapter.notifyDataSetChanged();
        lv_venue.setAdapter(venueAdapter);
从UI线程

(二)
您需要提供正确的
getItemId(int位置)
(如果您没有某种id,只需返回位置)

可以给出一个示例,您的意思是什么?顺便说一句,为什么不使用GSON库对java POJO的服务器响应进行建模?我不喜欢使用库muchI,我是在onPostExecute()中这样做的asyncTaskTry venueAdapter.notifyDataSetChanged()的名称;在设置适配器之后,也没有什么不同。我不明白当我清除列表时,它如何仍然有旧数据a)您将适配器设置为错误的ListView b)您清除适配器集合,但不通知旧适配器它如何显示活动的源代码/片段/将初始适配器设置为ListView的位置。