2015-04-17 3 views
2

Я пытаюсь создать клиент чата, даже если у меня есть проблема. Когда я открываю приложение в первый раз, и я открываю чат (ListView), он работает отлично.Android ListView не отображает входящие сообщения после возврата к активности

enter image description here

04-17 07:19:51.681 10020-10081/com.example.example E/SENDER ANSWER:﹕ yes 
04-17 07:19:55.494 10020-10081/com.example.example E/SENDER ANSWER:﹕ hi 

, но когда я выхожу из чата с задним днищем и я хочу вернуться к окну Оно не дисплей полученных сообщений, но выводящие мины

enter image description here

после того как я послал «второй» другой отправленный пользователем:

04-17 07:21:17.246 10020-10081/com.example.example E/SENDER ANSWER:﹕ second time and doesnt work 

и он не отображается в списке. вот мой код:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    chatmanager.addChatListener(new ChatManagerListener() { 
       @Override 
       public void chatCreated(Chat chat, boolean createdLocally) { 
       if (!createdLocally) { 
        chat.addMessageListener(new ChatMessageListener() { 
         @Override 
         public void processMessage(Chat chat, Message message) { 
          Log.e("SENDER ANSWER:", message.getBody()); 

          sender_messages = message.getBody(); 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            populateConversation(sender_messages, true); 

            populateConversationView(); 
           } 
          }); 
         } 

        }); 
       } 

       } 
      }); 
} 

может быть, это не должен быть с чатом слушателем, потому что он получает сообщения, но только не отображается. Я был бы признателен за любую помощь

public void populateConversationView(){ 
final ArrayAdapter<Message_Provider> adapter = new MyListAdapter(); 


messagesList.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
    messagesList.setAdapter(adapter); 

    adapter.registerDataSetObserver(new DataSetObserver() { 
     @Override 
     public void onChanged() { 
      super.onChanged(); 
      messagesList.setSelection(adapter.getCount()); 
     } 
    }); 

private class MyListAdapter extends ArrayAdapter<Message_Provider> { // Done 
     public MyListAdapter(){ 
      super(getApplicationContext(), R.layout.chat_conversation, messages); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View itemView = convertView; 
      if(itemView == null){ 
       itemView = getLayoutInflater().inflate(R.layout.source_message, parent, false); 
      } 


      Message_Provider currentContact = messages.get(position); 

      TextView myMessage = (TextView) itemView.findViewById(R.id.senderMessege); 

      myMessage.setText(currentContact.getMessage()); 

      LinearLayout.LayoutParams parameter = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
      if (currentContact.getSender()){ 
       parameter.gravity = Gravity.LEFT; 
       myMessage.setBackgroundResource(R.drawable.sender_messages); 

      }else { 
       parameter.gravity = Gravity.RIGHT; 
       myMessage.setBackgroundResource(R.drawable.my_message); 

      } 
      myMessage.setLayoutParams(parameter); 


      return itemView; 
     } 

Я тестировал весь день, и это, как, когда я иду назад и я открыть новый вид деятельности приращений чат слушатель превью один и не новый, и я думаю, что это происходит потому, что из runOnUiThread.

+0

дайте мне знать код вашего адаптера. –

+0

напишите свой код адаптера. Люди могут помочь вам лучше, чем – chaitanyad

+0

Я только что проверил, и когда я вернусь в чат, полученное сообщение не войдет в populateListView Funtion, и я думаю, это из-за runOnUiThread, и когда я возвращаюсь, он работает на предыдущем пользовательском интерфейсе – kobbycoder

ответ

2

FIXED THIS, OMG! после нескольких часов отладки XD мне нужно, чтобы закрыть чат в слушателе

runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
     populateConversation(sender_messages, true); 
     populateConversationView(); 
     chat.close(); // HERE 

     } 
    }); 

Я размещаю это потому, что новички, как я, и могут получить эту проблему тоже.

Смежные вопросы