有一個奇怪的問題,其中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);
}
感謝您的幫助!
添加其他條件,你如果: 如果(message.getIsRead()== 0) messageText.setTypeface(NULL,Typeface.BOLD ); else messageText.setTypeface(null,Typeface.NORMAL); – 2014-12-03 18:49:39