Android 添加新数据时更新CustomListViewAdapter
我有一个聊天应用程序,当我收到来自用户的消息时,CustomListViewAdapter不会更新。我一直在使用adapter.notifyDataSetChanged();但这在我的情况下不起作用。这是我的密码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
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)