0

有一个奇怪的问题,其中ListView没有呈现代码在调试或LogCat输出时反映的内容。Android ListView自定义ArrayAdapter - 项目TextView的设置样式不一致地工作

这很简单。我正在使用自定义ArrayAdapter填充ListView,并使用一些POJO实体。数据是正确的,完美的工作,没有问题。当用户点击其中一个项目时,我在表格中设置了一个标记,将该记录标记为“已读”。在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); 
} 

感谢您的帮助!

+1

添加其他条件,你如果: 如果(message.getIsRead()== 0) messageText.setTypeface(NULL,Typeface.BOLD ); else messageText.setTypeface(null,Typeface.NORMAL); – 2014-12-03 18:49:39

回答

2

你必须else语句添加到您的if条件

if (message.getIsRead() == 0) 
       messageText.setTypeface(null, Typeface.BOLD); 
else 
       messageText.setTypeface(null, Typeface.NORMAL); 
相关问题