Android: пользовательский адаптер не может перезагрузить представление списка при возобновлении активности

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

Шаги, которые я сделал до сих пор:

Используйте отладчик, чтобы узнать, не является ли сообщение пустым, сообщения получены и не пусты.

Используйте отладчик внутри функции receive (), это происходит при первом запуске активности. Функция looper.loop () возвращает управление основному потоку, но в следующий раз при возобновлении активности этот цикл не заканчивается (возможно, это является причиной ошибки )

p.s: При первом запуске этого действия я могу отобразить полученные сообщения, но когда я возвращаюсь и возобновляю действие, происходит сбой (receive), я ничего не понимаю, любой небольшой намек в правильном направлении приветствуется, спасибо за время.

открытый класс hotListener расширяет ListActivity {

private XMPPConnection connection;
private IBinder binder;
private Handler mHandler = new Handler();
private ArrayList<String> messages = new ArrayList<String>();
ArrayList<ChatMessage> messagex= new ArrayList<ChatMessage>();;
ChattingAdapter adaptex;
Intent mIntent ;
private ListView listview;
EditText sender_message ;
String msg;


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.listener);
    //messagex.add(new ChatMessage("Hello", false));
    adaptex  = new ChattingAdapter(getApplicationContext(),messagex);
    setListAdapter(adaptex);

    Button send_button = (Button) findViewById(R.id.chat_send_message);
    sender_message = (EditText) findViewById(R.id.chat_input);
    send_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg = sender_message.getText().toString();
            sender_message.setText("");
            if(!(msg.length()==0)){
                messagex.add(new ChatMessage(msg, true));
                //addNewMessage(new ChatMessage(msg, true));
                adaptex.notifyDataSetChanged();
                getListView().setSelection(messagex.size()-1);
            }

        }
    });
    if(!isMyServiceRunning()){
        System.out.println("seems like service not running");
        startService(new Intent(this,xService.class));
        System.out.print(" now started ");
    }       
}

@Override
protected void onStart(){
    super.onStart();
    Boolean kuch = bindService(new Intent(this,xService.class), mConnection,Context.BIND_AUTO_CREATE);
    //System.out.println(kuch);
    //System.out.println("bind done");        
}

private void receives(XMPPConnection connection2) {
        //ChatManager chatmanager = connection.getChatManager();
        connection2.getChatManager().addChatListener(new ChatManagerListener() {

            @Override
            public void chatCreated(Chat arg0, boolean arg1) {
                arg0.addMessageListener(new MessageListener() {

                    @Override
                    public void processMessage(Chat chat, Message message) {

                        final String from = message.getFrom();
                        final String body = message.getBody();
                        mHandler.post(new Runnable() {
                            ChatMessage kudi = new ChatMessage(body, false);
                            @Override
                            public void run() {
                                //setListAdapter(1);
                                messagex.add(kudi);
                                adaptex.notifyDataSetChanged();
                                getListView().setSelection(messagex.size()-1);
                                Toast.makeText(hotListener.this,body,Toast.LENGTH_SHORT).show();                                }
                        });
                        //System.out.println(String.format("Received message "+body +" from "+ from));
                    }
                });
            }
        });
}

private boolean isMyServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for(RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)){
        if(xService.class.getName().equals(service.service.getClassName())){
            return true;
        }
    }
    //System.out.print("false");
    return false;
}

@Override
  protected void onResume() {
    bindService(new Intent(this, xService.class), mConnection, Context.BIND_AUTO_CREATE);
    setListAdapter(adaptex);
    adaptex.notifyDataSetChanged();
    super.onResume();
  }
 @Override
  protected void onPause() {
    unbindService(mConnection);
    super.onPause();
  }

 private ServiceConnection mConnection = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {
            connection = null;
            service = null;
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder binder) {
            //System.out.println("binding in hot listener");
            service = ((xService.MyBinder)binder).getService();
            connection = service.getConnection();
            receives(connection);
            Log.wtf("Service","connected");
        }
    };

    void addNewMessage(ChatMessage m)
    {
        System.out.println("1");
        messagex.add(m);
        System.out.println("2");
        adaptex.notifyDataSetChanged();
        System.out.println("3");
        getListView().setSelection(messagex.size()-1);
    }

}

Мой адаптер:

import java.util.ArrayList;

import android.content.Context;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class ChattingAdapter extends BaseAdapter{
    private Context mContext;
    private ArrayList<ChatMessage> mMessages;


    public ChattingAdapter(Context context, ArrayList<ChatMessage> messages) {
        super();
        this.mContext = context;
        this.mMessages = messages;
    }
    @Override
    public int getCount() {
        return mMessages.size();
    }
    @Override
    public Object getItem(int position) {       
        return mMessages.get(position);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ChatMessage message = (ChatMessage) this.getItem(position);

        ViewHolder holder; 
        if(convertView == null)
        {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(mContext).inflate(R.layout.listitem, parent, false);
            holder.message = (TextView) convertView.findViewById(R.id.text1);
            convertView.setTag(holder);
        }
        else
            holder = (ViewHolder) convertView.getTag();

        holder.message.setText(message.getMessage());
        LayoutParams lp = (LayoutParams) holder.message.getLayoutParams();      

        //Check whether message is mine to show green background and align to right

        if(message.isMine())

        {           holder.message.setBackgroundResource(R.drawable.msgbox_new_selected_go_up);         

                lp.gravity = Gravity.RIGHT;     
        }
        //If not mine then it is from sender to show orange background and align to left

        else        
        {
            holder.message.setBackgroundResource(R.drawable.msgbox_other_go_up);

            lp.gravity = Gravity.LEFT;

        }
            holder.message.setLayoutParams(lp);
            //holder.message.setTextColor(R.color.textColor);   

        return convertView;
    }
    private static class ViewHolder
    {
        TextView message;
    }

    @Override
    public long getItemId(int position) {
        //Unimplemented, because we aren't using Sqlite.
        return position;
    }

}

Ответы на вопрос(0)

Ваш ответ на вопрос