4

我正在开发一个我正在为其构建评论列表的应用程序。这个想法是用户可以添加评论,并在 ListView 中查看它们。问题是 ListView 中项目的文本颜色是浅灰色(难以阅读)而不是黑色,除非重新启动应用程序并使用已经可用的评论列表。换句话说,只有动态添加评论时,文本才会显示为灰色。你们知道为什么会这样吗?我的代码如下:

    previousCommentsList = (ListView) findViewById(R.id.previous_comments_list);
    commentsArrayList = new ArrayList<String>();
    for (Comment comment : DrawView.comments) {         
        commentsArrayList.add(comment.text);
    }
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, commentsArrayList);
    previousCommentsList.setAdapter(adapter);

    saveCommentButton = (Button) findViewById(R.id.save_comment_button);
    saveCommentButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText commentEditText = (EditText) findViewById(R.id.comment_edittext);

            // Add the comment
            Comment comment = new Comment();
            comment.text = commentEditText.getText().toString();
            DrawView.comments.add(comment);

            Toast.makeText(getApplicationContext(), "Comment saved", Toast.LENGTH_SHORT).show();

            commentsArrayList = new ArrayList<String>();
            for (Comment comment2 : DrawView.comments) {            
                commentsArrayList.add(comment2.text);
            }
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, commentsArrayList);
            previousCommentsList.setAdapter(adapter);
            // Probably using both notifyDataSetChanged() and invalidate() is redundant
            adapter.notifyDataSetChanged();
            previousCommentsList.invalidate();
        }
    });
4

2 回答 2

3

我有一个类似的问题。在我的情况下,它是由使用应用程序上下文而不是活动上下文引起的(在我看来,这里也是这种情况-- new ArrayAdapter<String>(getApplicationContext(),...);)。在我看来,正确的配色方案与活动上下文相关联,而不是与应用程序上下文相关联。

希望这会有所帮助。

另请参阅将 android.R.layout.simple_list_item_1 与浅色主题一起使用

于 2014-08-06T17:13:03.823 回答
1

我注释掉了您代码的某些部分,这似乎有点不必要。我不确定与Comment课程相关的代码。至少在这种情况下,这似乎是多余的。

previousCommentsList = (ListView) findViewById(R.id.previous_comments_list);

commentsArrayList = new ArrayList<String>();
for (Comment comment : DrawView.comments) {         
    commentsArrayList.add(comment.text);
}

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, commentsArrayList);
previousCommentsList.setAdapter(adapter);

saveCommentButton = (Button) findViewById(R.id.save_comment_button);

saveCommentButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        EditText commentEditText = (EditText) findViewById(R.id.comment_edittext);


        // COMMENT: Is creating a comment object really neccessary, if it only serves the purpose of saving a text ?


        Comment comment = new Comment();
        comment.text = commentEditText.getText().toString();
        // DrawView.comments.add(comment); COMMENT: -> Is this neccessary? 

        Toast.makeText(getApplicationContext(), "Comment saved", Toast.LENGTH_SHORT).show();

        // commentsArrayList = new ArrayList<String>();
        // for (Comment comment2 : DrawView.comments) {            
        commentsArrayList.add(comment.text);
        // }

        // ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, commentsArrayList);
        // previousCommentsList.setAdapter(adapter);

        adapter.notifyDataSetChanged();

    }
});
于 2013-08-04T12:14:47.003 回答