2016-11-24 8 views
0

リストビューをクリアすると、リストビューはなくなります。リストビューはforループからデータをフェッチします。listviewをクリアして新しいリストビューを追加する方法

回避方法:任意のループ内

  • 置くsetdaylist.clear()は、すべてのリストビューをクリアして、唯一のリスト項目を表示します。

  • メソッドの最上部に設定すると、すべてのリストビュー、すべてのソリューションが消去されますか?

コード:

public void onDataGotOnline(JSONObject response) { 

    DateTime today = new DateTime().withTimeAtStartOfDay(); 
    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
    try { 
     JSONArray currentData = response.getJSONArray("list"); 
       // setdaylist.clear(); 
     for (int i = 1; i < 5; i++) { 
      DateTime tomorow = today.plusDays(i).withTimeAtStartOfDay(); 
      String dtStr = fmt.print(tomorow); 
      int info = 0; 


      for(; info<currentData.length();info++){ 
       JSONObject managedata = currentData.getJSONObject(info); 
       String time= managedata.getString("dt_txt"); 

       if(time.equals(dtStr)){ 

        int getResult=info+8; 

        double[] arrayAverageTemp = new double[8]; 
        double[] arrayMaxTemp = new double[8]; 
        double[] arrayMinTemp = new double[8]; 
        int[] arrayWheaterId = new int[8]; 

        for (int a = info; a < getResult; a++) { 
         JSONObject datalist = currentData.getJSONObject(i); 
         JSONArray weatherdata = datalist.getJSONArray("weather"); 
         JSONObject weatherdata2 = weatherdata.getJSONObject(weatherdata.length() - 1); 
         int id = weatherdata2.getInt("id"); 

         JSONObject weather = datalist.getJSONObject("main"); 
         double avg_temp = weather.getDouble("temp"); 
         double max_temp = weather.getDouble("temp_max"); 
         double min_temp = weather.getDouble("temp_min"); 


         arrayWheaterId[a-info]=id; 
         arrayAverageTemp[a-info]=avg_temp; 
         arrayMaxTemp[a-info]=max_temp; 
         arrayMinTemp[a-info]=min_temp; 
        } 


        ManageData manageData = new ManageData(); 
        double max = manageData.findMax(arrayMaxTemp); 
        double min = manageData.findMin(arrayMinTemp); 
        WheatherData day = new WheatherData(); 
        day.setDay("sunday"); 
        // int image = convert.covertImage(icon); 
        day.setImage(R.drawable.ic_image_01d); 
        day.setDescrption("asdasd"); 
        day.setAvgTemp("14 °c"); 
        day.setMaxTemp(max+ "°c"); 
        day.setMinTemp(min+ "°c"); 

        setdaylist.add(day); 


        adapter.notifyDataSetChanged(); 

        // findMax(arrayMaxTemp); 
        //findMin(arrayMinTemp); 
        //findID(arrayWheaterId); 
        //findaverage(arrayAverageTemp); 





       } 
      } 
     } 
    } 
    catch (JSONException e){ 

    } 

} 
+0

いつリストビューをクリアしますか?新しいリストビューをいつ作成しますか? – 09Q71AO534

+0

'setdaylist.clear();'と 'adapter.notifyDataSetChanged();'はリストにデータを追加して再度通知します – SaravInfern

+0

@ 09Q71AO534上記のメソッドonDatagotOnlineはintefaceメソッドです。新しいリストアイテムを追加する必要があります。 – kenji

答えて

0

上記の議論から。

  • 問題は、Androidスタジオでのキャッシングの問題によるものです。
  • プロジェクトを削除してビルドすると、既存のキャッシュが削除されます。

次のforループの前のsetdaylistが期待どおりに機能します。

public void onDataGotOnline(JSONObject response) { 
     ... 
     try { 
      ... 
      setdaylist.clear(); 
      for (int i = 1; i < 5; i++) { 
       ... 
       for(; info<currentData.length();info++){ 
        ... 
        if(time.equals(dtStr)){ 
         ... 
          setdaylist.add(day); 
         ... 
        } 
       } 
      } 
     } 
     catch (JSONException e){} 
    } 
関連する問題