2015-07-21 39 views
0

我有一個包含不同項目的活動,其中一個項目是ListView。 我創建了一個自定義列表適配器併發送給它一個json數組。 列表的數據來自服務器。評論Android中的列表視圖

列表的目的是作出評論列表。我允許用戶插入 評論,然後我在ListView中顯示它。 當我有一些項目在列表中的作品,並顯示項目。 問題是當列表視圖爲空並且用戶發表評論時。 我看到數據已更改,但沒有看到該項目,表示該列表未更新。

因此,我嘗試向列表視圖添加空視圖,但它不起作用。

這裏是一個更新的代碼:(UPDATE

 if (!s.isEmpty() && !s.equals("{}")) { 

      try { 
       if (commentsListAdapter == null) { 
        commentsList.setEmptyView(findViewById(R.id.dummy)); 
        commentsListAdapter = new CommentsListAdapter(PostView.this); 
       } 
       JSONObject resObj = new JSONObject(s); 
       list.add(resObj); 

       commentsListAdapter.setDataSet(list); 

       cmntTxt.setText(""); 
       inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 
         InputMethodManager.HIDE_NOT_ALWAYS); 

       commentCounter.setText(Integer.toString(list.size())); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

和適配器裏面我有這樣的功能:

public void setDataSet(List<JSONObject> list){ 
    commentsList = list; 
    notifyDataSetChanged(); 
} 

但問題是不固定的..

+1

listview.setAdapter()的代碼在哪裏?也許在這個方法或Activity中發佈更多的代碼。 –

回答

1

我注意到代碼list.add(resObj)出現在new CommentsListAdapter之後,當列表爲空且出現在new CommentsListAdapter之前時當列表不爲空時。

我懷疑適配器CommentsListAdapter未使用對象list進行數據存儲。在這種情況下,您需要在適配器中創建一個公共方法來進行更新。換句話說,適配器正在使用另一個對象進行數據存儲。

它也可能有助於張貼CommentsListAdapter的代碼。但我希望我對我的發言是正確的。 我希望這是明確的......

+0

嗨,謝謝,我更新了我的代碼,但我得到了與前面的代碼相同的結果 – Elior

+0

@Elior,這個問題不應該很難解決。發佈適配器代碼。 –

+1

謝謝:)我看了我的其他代碼,並沒有注意到我忘記設置listview的adaper。謝謝你的幫助! – Elior

0

請更改下面的代碼:

public void setDataSet(List<JSONObject> list){ 
    commentsList = list; 
    notifyDataSetChanged(); 
} 

到:

private List<JSONObject> commentsList = new ArrayList<>(); 

public void setDataSet(List<JSONObject> list){ 
    commentsList.clear(); 
    commentsList.addAll(list); 
    notifyDataSetChanged(); 
} 

而且使用commentsList在您的適配器的所有其他方法。這是notifyDataSetChanged()工作的更好方法。

希望它有幫助! :)

0

如果您從外部添加您的評論,即從活動而不是從適配器添加您的評論比您設置適配器執行此操作。

youradapterobject.notifyDataSetChanged();

和不做commentsListAdapter ==比setemptyview空

它會自動如果空設定emptyview

正確的用法 list.setEmptyView(findViewById(R.id.erromsg));