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); 
相關問題