2013-04-23 50 views
0

notifyDataSetChanged()方法,这是我的代码更新的ListView处境艰难时呼叫机器人

public void onReceive(Conversation newConversation, Message message) { 
       LogManager.getLogger(getClass()).info("onReceive"); 
       Conversation conversation = null; 
       ListConversationAdapter adapter = (ListConversationAdapter)listViewConversation.getAdapter(); 
       int size = adapter.getCount(); 
       LogManager.getLogger(getClass()).info("size: " + size); 
       if(size > 0) 
       { 
        for(int i=0;i<size;i++) 
        { 
         if(adapter.getItemId(i) == newConversation.getId()) 
         { 
          conversation = (Conversation)adapter.getItem(i); 
          break; 
         } 
        } 
       } 

       if(conversation == null) 
       { 
        adapter.addItem(newConversation); 
        LogManager.getLogger(getClass()).info("add new conversation to adapter"); 
       } 
       LogManager.getLogger(getClass()).info("adapter.getCount(): " + adapter.getCount()); 
       adapter.notifyDataSetChanged(); 
       LogManager.getLogger(getClass()).info("notify dataset changed"); 
      } 
     } 

这是输出结果后,我的方法称为

onReceive 
size: 0 
add new conversation to adapter 
adapter.getCount(): 1 

它停止线LogManager.getLogger(的getClass ())。info(“adapter.getCount():”+ adapter.getCount());并锁定adapter.notifyDataSetChanged();方法永远在我的代码中有什么问题? 请帮助我! 这是getView方法

public View getView(int position, View convertView, ViewGroup parent) { 
     Conversation conversation = conversations.get(position); 
     if(conversation != null) 
     { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      LinearLayout parentView = (LinearLayout) inflater.inflate(R.layout.conversation_item, null); 

      TextView textViewName = (TextView)parentView.findViewById(R.id.textViewName); 
      TextView textViewLastMessage = (TextView)parentView.findViewById(R.id.textViewLastMessage); 

      textViewName.setText(conversation.getName()); 

      List<Message> messages = MessageManager.getProvider().getMessages(conversation.getId(), 0, 0); 
      if(messages.size() > 0) 
      { 
       Message message = messages.get(messages.size() - 1); 
       textViewLastMessage.setText(Emoticon.getSmiledText(message.getBody())); 
      } 

      LogManager.getLogger(getClass()).info("return not null view"); 
      return parentView; 
     } 
     LogManager.getLogger(getClass()).info("return null view"); 
     return null; 
    } 
+0

一段时间后有什么错误? – waqaslam 2013-04-23 08:28:50

+0

不!没有改变。在正确的情况下,“通知数据集已更改”必须打印和我的listView更改 – 2013-04-23 08:40:51

+0

如果没有ANR,并没有其他崩溃,那么我相信你的应用程序工作得很好。 – waqaslam 2013-04-23 08:45:57

回答

0

首先,有许多,似乎我错了你的getView方法的东西...

public View getView(int position, View convertView, ViewGroup parent) { 
     Conversation conversation = conversations.get(position); 
     if(convertView == null) 
     { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = (LinearLayout) inflater.inflate(R.layout.conversation_item, parent); 
     } 
      TextView textViewName = (TextView)convertView.findViewById(R.id.textViewName); 
      TextView textViewLastMessage = (TextView)convertView.findViewById(R.id.textViewLastMessage); 

     if(conversation=null{ 
      textViewName.setText(conversation.getName()); 

      List<Message> messages = MessageManager.getProvider().getMessages(conversation.getId(), 0, 0); 
      if(messages.size() > 0) 
      { 
       Message message = messages.get(messages.size() - 1); 
       textViewLastMessage.setText(Emoticon.getSmiledText(message.getBody())); 
      } 
     } 
     LogManager.getLogger(getClass()).info("return not null view"); 
     return convertView; 

     } 

现在试着debugg您的应用程序,并告诉我们它停止。

+0

我改变了我的代码,按照你的建议,没有任何改变。列表视图仍然过时和对话框不排除 – 2013-04-23 10:44:51

+0

你有没有试过debugg您的应用程序?我想你的getView()会出错,因为你的日志中没有得到“return not null view”消息。 – Gordak 2013-04-23 10:47:37

+0

是的,我试过调试应用程序,它停止在ThreadPoolExecutor.runWorker(ThreadPoolExecutor $工作)行:1069 – 2013-04-23 10:59:06