评论Android中的列表视图

时间:2015-07-21 20:52:01

标签: android listview android-listview

我有一个包含不同项目的Activity,其中一个项目是ListView。 我创建了一个自定义列表适配器并向其发送一个json数组。 列表的数据从服务器到达。

列表目的是制作评论列表。我允许用户插入 评论,然后我在ListView中显示它。 当我在列表中有一些项目时,它会起作用,并显示项目。 问题是当listview为空并且用户发表评论时。 我看到数据已更改,但我看不到该项目,表示列表未刷新..

所以我尝试在列表视图中添加一个空视图,但它不起作用。

以下是更新后的代码:( 更新

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

但问题并没有解决..

3 个答案:

答案 0 :(得分:1)

我注意到代码list.add(resObj)出现在new CommentsListAdapter后,当列表为空时出现,并且当列表非空时显示在new CommentsListAdapter之前。

我怀疑适配器CommentsListAdapter没有使用对象list进行数据存储。在这种情况下,您需要在适配器中创建一个公共方法来进行更新。换句话说,适配器正在使用另一个对象进行数据存储。

也可以帮助发布CommentsListAdapter的代码。但我希望我对我的陈述是正确的。 我希望这很清楚......

答案 1 :(得分: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()工作的更好方法。

希望它有所帮助! :)

答案 2 :(得分:0)

如果您要从外部添加注释,即从活动而不是从适配器添加注释,而不是在设置适配器时添加注释。

youradapterobject.notifyDataSetChanged();

并且不要执行commentsListAdapter == null而不是setemptyview

如果null为

,它会自动设置空视图

正确使用  list.setEmptyView(findViewById(R.id.erromsg));