2015-07-21 2 views
0

У меня есть Деятельность, содержащая различные элементы, один из которых - ListView. Я создал собственный адаптер списка и отправил ему массив json. Данные для списка поступают с сервера.Комментарии ListView в Android

Цель списка - составить список комментариев. Я разрешил пользователю вставить комментарий, а затем я покажу его в ListView. Когда у меня есть некоторые элементы в списке, он работает, и элементы отображаются. Проблема заключается в том, когда 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 для хранения данных. В этом случае вам необходимо сделать общедоступный метод в адаптере для обновления. Другими словами, адаптер использует другой объект для хранения данных.

Возможно также опубликовать код для комментариевListAdapter. Но я надеюсь, что я прав в своих заявлениях. Я надеюсь, что это понятно ...

+0

Привет, спасибо, я обновил свой код, но получаю тот же результат, что и предыдущий код – Elior

+0

@Elior, эту проблему не составит труда исправить. Введите код адаптера. –

+1

Спасибо :) Я посмотрел в другом коде и не заметил, что забыл установить 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 == NULL, чем setemptyview

автоматически устанавливает emptyview, если его нулевой

правильное использование list.setEmptyView (findViewById (R.id.erromsg));