这里有一个奇怪的问题,ListView在调试或LogCat输出时不会呈现代码反映的内容。
这很简单。我正在使用自定义ArrayAdapter和一些POJO实体填充ListView。数据是正确的,并且工作完美,没有任何问题。当用户单击其中一个项目时,我在表格中设置了一个标记,将记录标记为“已读”。在ArrayAdapter中,我正在检查该标志,如果它未读,则将该项设置为粗体。
问题:在点击所有其他项目之前,第一项永远不会被加粗。我可以点击第1项,返回,它仍然是粗体。然后我可以单击项目2,返回,然后项目1和2都不再是粗体。无论我点击多少项,都是一样的。此外,其他一些测试人员已经看到了其他不一致的地方,其中所有项目都会变为粗体,然后从另一个项目返回活动时,它们不再是粗体。
我已经记录并调试过,所有通过的实体都反映了正确的数据,完全符合预期。这是渲染无法正确反映数据。
这是我的第一个,我确定我错过了一些明显的东西。
我的ArrayAdapter:
public class MessageAdapter extends ArrayAdapter<Message>
{
private List<Message> messages;
public MessageAdapter(Context context, int resource, List<Message> entities)
{
super(context, resource, entities);
this.messages = entities;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_message, parent, false);
Message message = this.messages.get(position);
if (message != null)
{
TextView messageText = (TextView)convertView.findViewById(R.id.messageItemText);
messageText.setText(String.format("Type: %s Received: %s", message.getType(), StringUtil.getDateTime(message.getReceived())));
if (message.getIsRead() == 0)
messageText.setTypeface(null, Typeface.BOLD);
}
return convertView;
}
}
我的活动:
@Override
protected void onCreate(Bundle savedInstanceState)
{
List<Message> msgData = data.getAll();
MessageAdapter adapter = new MessageAdapter(this, R.layout.list_item_message, msgData);
}
感谢您的帮助!
答案 0 :(得分:2)
你必须在if条件
中添加else语句if (message.getIsRead() == 0)
messageText.setTypeface(null, Typeface.BOLD);
else
messageText.setTypeface(null, Typeface.NORMAL);