簡體   English   中英

調用notifyDataSetChanged()時,ArrayAdapter不更新視圖

[英]ArrayAdapter does not update view when notifyDataSetChanged() is called

所以我有一段看起來像這樣的代碼

    floorList = new ArrayList<String>();
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, floorList);
    arrayAdapter.setNotifyOnChange(true);
    floorSpinner.setAdapter(arrayAdapter);
    floorList.add("a");

    Call<ParkourResponse<ParkingPlaceResponseObject>> getPlaceDetailCall = Helper.getParkourService().getPlaceDetail(placeID);
    getPlaceDetailCall.enqueue(new Callback<ParkourResponse<ParkingPlaceResponseObject>>() {
        @Override
        public void onResponse(Call<ParkourResponse<ParkingPlaceResponseObject>> call, Response<ParkourResponse<ParkingPlaceResponseObject>> response) {
            ParkingPlaceResponseObject placeDetail = response.body().getRespObject();
            Floor[] floorArray = placeDetail.getFloor();
            floorList.clear();
            arrayAdapter.notifyDataSetChanged();
            for(int i = 0; i < floorArray.length; i++){
                floorList.add(Integer.toString(floorArray[i].getNumber()));
            }
        }

        @Override
        public void onFailure(Call<ParkourResponse<ParkingPlaceResponseObject>> call, Throwable t) {

        }
    });

因此,當我嘗試添加不屬於Retrofit服務的“ a”時,微調框將更新。

但是我對onResponse()中的floorList所做的所有操作都不會更新適配器和微調器。 我試圖在onResponse()上清除它,然后調用notifyDataSetChanged(),即使那樣也不會從微調器中刪除“ a”選項。

有人知道怎么修這個東西嗎?

在遵循此答案時,請注意Selvin和Gautam的評論,因為它們是正確的,可以幫助您理解為什么代碼應如下所示:

floorList = new ArrayList<String>();
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, floorList);
arrayAdapter.setNotifyOnChange(true);
floorSpinner.setAdapter(arrayAdapter);
arrayAdapter.add("a"); //I would jsut pass this into the adapter's constructor

Call<ParkourResponse<ParkingPlaceResponseObject>> getPlaceDetailCall = Helper.getParkourService().getPlaceDetail(placeID);
getPlaceDetailCall.enqueue(new Callback<ParkourResponse<ParkingPlaceResponseObject>>() {
    @Override
    public void onResponse(Call<ParkourResponse<ParkingPlaceResponseObject>> call, Response<ParkourResponse<ParkingPlaceResponseObject>> response) {
        ParkingPlaceResponseObject placeDetail = response.body().getRespObject();
        Floor[] floorArray = placeDetail.getFloor();
        arrayAdapter.clear(); //update the adapter, not the external list
        arrayAdapter.setNotifyOnChange(false); //we'll only update after list is full, for efficiency
        for(int i = 0; i < floorArray.length; i++){
            arrayAdapter.add(Integer.toString(floorArray[i].getNumber()));
        }
        arrayAdapter.setNotifyOnChange(true);
        arrayAdapter.notifyDataSetChanged();
    }

    @Override
    public void onFailure(Call<ParkourResponse<ParkingPlaceResponseObject>> call, Throwable t) {

    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM