Android 添加新数据时更新CustomListViewAdapter

Android 添加新数据时更新CustomListViewAdapter,android,xmpp,Android,Xmpp,我有一个聊天应用程序,当我收到来自用户的消息时,CustomListViewAdapter不会更新。我一直在使用adapter.notifyDataSetChanged();但这在我的情况下不起作用。这是我的密码 public class Messages extends Activity implements OnItemClickListener{ private RowItem item; ListView listView; public static List<Row

我有一个聊天应用程序,当我收到来自用户的消息时,CustomListViewAdapter不会更新。我一直在使用adapter.notifyDataSetChanged();但这在我的情况下不起作用。这是我的密码

public class Messages extends Activity implements
     OnItemClickListener{

private RowItem item;
ListView listView;
public static List<RowItem> rowItems;
private CustomListViewAdapter adapter; 
//private ArrayList<String> messages = new ArrayList();


public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub\     
    View view= inflater.inflate(R.layout.messages,null);
        return view;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.messages);



    rowItems = new ArrayList<RowItem>();
    listView = (ListView) findViewById(R.id.list1);
    item = new RowItem(R.drawable.messages, "messages");
    rowItems.add(item);
    adapter = new CustomListViewAdapter(this,
            R.layout.list_item, rowItems);
    final EditText msg1 = (EditText)findViewById(R.id.msg);
    Button send = (Button) this.findViewById(R.id.send);
    send.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if(msg1.getText().toString().equals(""))
            {
                Toast.makeText(getApplicationContext(), "type message", Toast.LENGTH_LONG).show();
            }else
            { 
            String to = "asghar@web.vlivetech.com";
            String text = msg1.getText().toString();
            msg1.setText("");
            Log.i("XMPPClient", "Sending text [" + text + "] to [" + to + "]");
            Message msg = new Message(to, Message.Type.chat);
            msg.setBody(text);
            Network.connection.sendPacket(msg);
            //messages.add(Network.connection.getUser() + ":");
            //messages.add(text);
            item = new RowItem(R.drawable.connection, text);
            rowItems.add(item);
            adapter = new CustomListViewAdapter(getBaseContext(),
                    R.layout.list_item, rowItems);
            listView.setAdapter(adapter);

            //setListAdapter();
            }
        }
    });

    PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
    Network.connection.addPacketListener(new PacketListener() {
        public void processPacket(Packet packet) {
            Message message = (Message) packet;
            if (message.getBody() != null) {
                String fromName = StringUtils.parseBareAddress(message.getFrom());
                Log.i("XMPPClient", "Got text [" + message.getBody() + "] from [" + fromName + "]");
               //recieve.setText(message.getBody());
                /*messages.add(fromName + ":");
                messages.add(message.getBody());*/
                // Add the incoming message to the list view
                item = new RowItem(R.drawable.billing, message.getBody());
                adapter = new CustomListViewAdapter(getBaseContext(),
                        R.layout.list_item, rowItems);

                rowItems.add(item);
                //adapter.notifyDataSetChanged();
                //adapter.notifyDataSetChanged();
                //listView.setAdapter(adapter);
            }
        }
    }, filter);

    PacketFilter filter1 = new MessageTypeFilter(Message.Type.headline);
    Network.connection.addPacketListener(new PacketListener() {
        public void processPacket(Packet packet) {
            Message message = (Message) packet;
            if (message.getBody() != null) {
                String fromName = StringUtils.parseBareAddress(message.getFrom());
                Log.i("XMPPClient", "Got text wth xml [" + message.toXML() + "] from [" + fromName + "]");
               //recieve.setText(message.getBody());
                /*messages.add(fromName + ":");
                messages.add(message.getBody());*/
                 // Add the incoming message to the list view

                item = new RowItem(R.drawable.billing, message.getBody());
                adapter = new CustomListViewAdapter(getBaseContext(),
                        R.layout.list_item, rowItems);                 
                rowItems.add(item);
                //adapter.notifyDataSetInvalidated();
                //adapter.notifyDataSetChanged();
                //listView.setAdapter(adapter);
            }
        }
    }, filter1);

    //listView.setAdapter(adapter);
}

@Override
protected void onRestart() {
    // TODO Auto-generated method stub
    super.onRestart();
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.messages, menu);
    return true;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {

}
公共类消息扩展活动实现
麦克利克监听器{
私人物品;
列表视图列表视图;
公共静态列表行项目;
私有CustomListViewAdapter适配器;
//private ArrayList messages=new ArrayList();
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//TODO自动生成的方法存根\
视图=充气机充气(R.layout.messages,null);
返回视图;
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.messages);
rowItems=新的ArrayList();
listView=(listView)findViewById(R.id.list1);
item=新行item(R.drawable.messages,“messages”);
行项目。添加(项目);
adapter=新的CustomListViewAdapter(此,
R.layout.list_项目,行项目);
最终EditText msg1=(EditText)findViewById(R.id.msg);
按钮发送=(按钮)this.findViewById(R.id.send);
send.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图){
if(msg1.getText().toString().equals(“”)
{
Toast.makeText(getApplicationContext(),“键入消息”,Toast.LENGTH_LONG.show();
}否则
{ 
字符串to=”asghar@web.vlivetech.com";
String text=msg1.getText().toString();
msg1.setText(“”);
Log.i(“XMPPClient”,“发送文本[“+text+”]到[“+to+”]”);
Message msg=新消息(收件人,Message.Type.chat);
msg.setBody(文本);
网络连接发送包(msg);
//messages.add(Network.connection.getUser()+“:”);
//消息。添加(文本);
item=新行item(R.drawable.connection,text);
行项目。添加(项目);
adapter=新的CustomListViewAdapter(getBaseContext(),
R.layout.list_项目,行项目);
setAdapter(适配器);
//setListAdapter();
}
}
});
PacketFilter=newmessagetypefilter(Message.Type.chat);
Network.connection.addPacketListener(新的PacketListener(){
公共无效处理数据包(数据包){
消息消息=(消息)数据包;
if(message.getBody()!=null){
String fromName=StringUtils.parseBareAddress(message.getFrom());
Log.i(“XMPPClient”,“从[“+fromName+”]”获取文本[“+message.getBody()+”];
//receive.setText(message.getBody());
/*messages.add(fromName+“:”);
messages.add(message.getBody())*/
//将传入消息添加到列表视图
item=新行item(R.drawable.billing,message.getBody());
adapter=新的CustomListViewAdapter(getBaseContext(),
R.layout.list_项目,行项目);
行项目。添加(项目);
//adapter.notifyDataSetChanged();
//adapter.notifyDataSetChanged();
//setAdapter(适配器);
}
}
},过滤器);
PacketFilter filter1=新建MessageTypeFilter(Message.Type.headline);
Network.connection.addPacketListener(新的PacketListener(){
公共无效处理数据包(数据包){
消息消息=(消息)数据包;
if(message.getBody()!=null){
String fromName=StringUtils.parseBareAddress(message.getFrom());
Log.i(“XMPPClient”,“从[“+fromName+”]”获取带有xml[“+message.toXML()+”]的文本;
//receive.setText(message.getBody());
/*messages.add(fromName+“:”);
messages.add(message.getBody())*/
//将传入消息添加到列表视图
item=新行item(R.drawable.billing,message.getBody());
adapter=新的CustomListViewAdapter(getBaseContext(),
R.layout.list_项目,行项目);
行项目。添加(项目);
//adapter.notifyDataSetInvalidated();
//adapter.notifyDataSetChanged();
//setAdapter(适配器);
}
}
},过滤器1);
//setAdapter(适配器);
}
@凌驾
受保护的void onRestart(){
//TODO自动生成的方法存根
super.onRestart();
}
@凌驾
受保护的void onResume(){
//TODO自动生成的方法存根
super.onResume();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.messages,menu);
返回true;
}
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
}

}

试试这段代码,如果行得通,我会告诉你原因:

public class Messages extends Activity implements
OnItemClickListener{

private RowItem item;
ListView listView;
public static List<RowItem> rowItems = new ArrayList<RowItem>();
private CustomListViewAdapter adapter; 
//private ArrayList<String> messages = new ArrayList();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.messages);




    listView = (ListView) findViewById(R.id.list1);
    item = new RowItem(R.drawable.messages, "messages");
    rowItems.add(item);
    adapter = new CustomListViewAdapter(this,
            R.layout.list_item, rowItems);
    final EditText msg1 = (EditText)findViewById(R.id.msg);
    Button send = (Button) this.findViewById(R.id.send);
    send.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if(msg1.getText().toString().equals(""))
            {
                Toast.makeText(getApplicationContext(), "type message", Toast.LENGTH_LONG).show();
            }else
            { 
            String to = "asghar@web.vlivetech.com";
            String text = msg1.getText().toString();
            msg1.setText("");
            Log.i("XMPPClient", "Sending text [" + text + "] to [" + to + "]");
            Message msg = new Message(to, Message.Type.chat);
            msg.setBody(text);
            Network.connection.sendPacket(msg);
            //messages.add(Network.connection.getUser() + ":");
            //messages.add(text);
            item = new RowItem(R.drawable.connection, text);
            rowItems.add(item);
            adapter.notifyDataSetChanged();
            }
        }
    });

    PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
    Network.connection.addPacketListener(new PacketListener() {
        public void processPacket(Packet packet) {
            Message message = (Message) packet;
            if (message.getBody() != null) {
                String fromName = StringUtils.parseBareAddress(message.getFrom());
                Log.i("XMPPClient", "Got text [" + message.getBody() + "] from [" + fromName + "]");
               //recieve.setText(message.getBody());
                /*messages.add(fromName + ":");
                messages.add(message.getBody());*/
                // Add the incoming message to the list view
                item = new RowItem(R.drawable.billing, message.getBody());
                rowItems.add(item);
                adapter.notifyDataSetChanged();

            }
        }
    }, filter);

    PacketFilter filter1 = new MessageTypeFilter(Message.Type.headline);
    Network.connection.addPacketListener(new PacketListener() {
        public void processPacket(Packet packet) {
            Message message = (Message) packet;
            if (message.getBody() != null) {
                String fromName = StringUtils.parseBareAddress(message.getFrom());
                Log.i("XMPPClient", "Got text wth xml [" + message.toXML() + "] from [" + fromName + "]");
               //recieve.setText(message.getBody());
                /*messages.add(fromName + ":");
                messages.add(message.getBody());*/
                 // Add the incoming message to the list view

                item = new RowItem(R.drawable.billing, message.getBody());                
                rowItems.add(item);
                adapter.notifyDataSetInvalidated();

            }
        }
    }, filter1);

}
公共类消息扩展活动实现
麦克利克监听器{
私人物品;
列表视图列表视图;
public static List rowditems=new ArrayList();
私有CustomListViewAdapter适配器;
//private ArrayList messages=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.messages);
listView=(listView)findViewById(R.id.list1);
item=新行item(R.drawable.messages,“messages”);
行项目。添加(项目);
adapter=新的CustomListViewAdapter(此,
R.layout.list_项目,行项目);
最终EditText msg1=(EditText)findViewById(R.id.msg);
按钮发送=(按钮)this.findViewById(R.id.send);
send.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图vie)