I am trying to update the listview with baseadapter during the presence notification in rosterlistener.
But the updated data not reflecting in listview. please help me.
below is my customadapter class.
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;
}
}
Listener :
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");
}
Activity code:
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);
}
so what I am missing here to work properly..