我正在尝试在rosterlistener中的状态通知期间使用baseadapter更新listview。
但更新的数据未反映在listview中。请帮帮我。
下面是我的习惯用语类。
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ContactAdapter extends BaseAdapter{
private Context mContext;
private ArrayList<Contact> Contact_List;
Contact contact;
String Name,Number,Status;
ImageView item_image;
TextView tv_Name,tv_Number,tv_Status;
public ContactAdapter(Context c, ArrayList<Contact> C_List){
super();
mContext = c;
Contact_List = C_List;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Contact_List.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View view, ViewGroup arg2) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item, null);
contact = Contact_List.get(arg0);
Name = contact.getName();
Number = contact.getNumber();
Status = contact.getStatus();
tv_Name = (TextView) view.findViewById(R.id.Name);
tv_Number = (TextView) view.findViewById(R.id.Number);
tv_Status = (TextView) view.findViewById(R.id.status);
tv_Name.setText(Name);
tv_Number.setText(Number);
tv_Status.setText(Status);
return view;
}
}
听众:
RosterListener update_contacts = new RosterListener() {
@Override
public void presenceChanged(Presence presence) {
String Name="",Status="";
Log.d(Constants.TAG, "Presence value = "+presence);
Log.d(Constants.TAG, "Presence getfrom value = "+presence.getFrom());
Log.d(Constants.TAG, "Presence getstatus value = "+presence.getStatus());
Log.d(Constants.TAG, "Presence getto value = "+presence.getTo());
Name = presence.getFrom().substring(0, presence.getFrom().indexOf('@'));
Status = presence.getStatus();
Log.d(Constants.TAG, "Name value = "+Name);
Log.d(Constants.TAG, "About to update contact list");
RosterOperations.updateContactListByPresenceNotification(Name,Status,Contact_List);
for(Contact c : Contact_List){
Log.d(Constants.TAG, "name :"+c.getName());
Log.d(Constants.TAG, "status :"+c.getStatus());
Log.d(Constants.TAG, "number : "+c.getNumber());
}
Log.d(Constants.TAG, "About to notify datasetchanged");
contactAdapter.notifyDataSetChanged();
Log.d(Constants.TAG, "notify datasetchanged done");
}
活动代码:
Collection<RosterEntry> entries;
ListView lv_roster;
ArrayList<Contact> Contact_List;
ContactAdapter contactAdapter;
Context context;
Roster roster;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
context =this;
lv_roster = (ListView) findViewById(R.id.user_list);
Contact_List = new ArrayList<Contact>();
//Get the Roster from server
Log.d(Constants.TAG, "Getting the roster from connection");
roster = MainActivity.connection.getRoster();
roster.addRosterListener(update_contacts);
Log.d(Constants.TAG, "Getting the entries from roster");
entries = roster.getEntries();
Log.d(Constants.TAG, "Getting the entries from roster");
RosterOperations.createContactListByRosterEntries(entries,Contact_List,roster);
contactAdapter = new ContactAdapter(context, Contact_List);
lv_roster.setAdapter(contactAdapter);
}
所以我在这里错过了正常工作..
答案 0 :(得分:0)
您的方法RosterOperations.createContactListByRosterEntries()
是否会创建新的ArrayList<Contact>
实例?如果是,您应该首先刷新适配器中的数据:
public void setNewData(ArrayList<Contact> newData) {
Contact_List.clear();
Contact_List.addAll(newData);
this.notifyDataSetChanged();
}