java - read contacts from phonebook and when clicking on the contact name show their phone numbers on a different page -
im new in app development wrote code want read contacts list phone book , have managed click on contact. problem want display contacts name , phone number on different page when contacts shown on contacts listview clicked. want show name , phone number on add_friend class.
this contact.java
public class contact extends appcompatactivity implements loadermanager .loadercallbacks<cursor> { private static final string[] from_columns = { contactscontract.data.contact_id, build.version.sdk_int >= build.version_codes.honeycomb ? contactscontract.contacts.display_name_primary : contactscontract.contacts.display_name, contactscontract.data.photo_id, }; private static final int request_permission = 0;private contactadapter mcontactadapter; private recyclerview mcontactrecyclerview; private static final int loader_id = 1; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.contacts); if (activitycompat.checkselfpermission(contact.this, manifest.permission .read_contacts) != packagemanager.permission_granted) { activitycompat.requestpermissions( contact.this, new string[]{ manifest.permission.read_contacts }, request_permission ); } else { getsupportloadermanager().initloader(loader_id, savedinstancestate, this); } //initialising loadermanger getsupportloadermanager().initloader(loader_id, savedinstancestate, this); mcontactrecyclerview = (recyclerview) findviewbyid(r.id.recycler_view_contacts); mcontactrecyclerview.sethasfixedsize(true); mcontactrecyclerview.setlayoutmanager(new linearlayoutmanager(contact.this)); mcontactadapter = new contactadapter(contact.this, null, contactscontract.data.contact_id); mcontactrecyclerview.setadapter(mcontactadapter); } @override public loader<cursor> oncreateloader(int id, bundle args) { switch (id) { case loader_id: return new cursorloader(contact.this, contactscontract.data.content_uri, from_columns, null, null, (build.version.sdk_int >= build.version_codes.honeycomb ? contactscontract.contacts.display_name_primary : contactscontract.contacts.display_name) + " asc"); default: if (buildconfig.debug) throw new illegalargumentexception("no id handled"); return null; } } @override public void onloadfinished(loader<cursor> loader, cursor data) { mcontactadapter.swapcursor(data); } @override public void onloaderreset(loader<cursor> loader) { mcontactadapter.swapcursor(null); }
}
this contactadapter
public class contactadapter extends cursorrecyclerviewadapter<contactadapter.contactviewholder> { public contactadapter(context context, cursor cursor, string id){ super(context, cursor, id); }textview contact_name; @override public contactviewholder oncreateviewholder(viewgroup parent, int viewtype) { view view = layoutinflater.from(parent.getcontext()).inflate(r.layout.row_contact, parent, false); contact_name=(textview)view.findviewbyid(r.id.contact_display_name); contact_name.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent contintent= new intent(mcontext.getapplicationcontext(), add_friend.class ); contintent.setflags(intent.flag_activity_new_task| intent.flag_activity_multiple_task); mcontext.getapplicationcontext().startactivity(contintent); } }); return new contactviewholder(view); } @override public void onbindviewholder(contactviewholder viewholder, cursor cursor) { //now can handle onbindviewholder long contactid = getitemid(cursor.getposition()); //setting username string username = cursor.getstring(cursor.getcolumnindex( build.version.sdk_int >= build.version_codes.honeycomb ? contactscontract.contacts.display_name_primary : contactscontract.contacts.display_name )); viewholder.contactdisplaynametextview.settext(username); //setting photo long photoid = cursor.getlong(cursor.getcolumnindex( contactscontract.data.photo_id )); if (photoid != 0) { uri contacturi = contenturis.withappendedid(contactscontract.contacts.content_uri, contactid); uri photouri = uri.withappendedpath(contacturi, contactscontract.contacts.photo .content_directory); viewholder.contactdisplayimageview.setimageuri(photouri); } else { viewholder.contactdisplayimageview.setimageresource(r.drawable.prof_icon); } } public static class contactviewholder extends recyclerview.viewholder { imageview contactdisplayimageview; textview contactdisplaynametextview; public contactviewholder(view itemview) { super(itemview); contactdisplayimageview = (imageview) itemview.findviewbyid(r.id.contact_display); contactdisplaynametextview = (textview) itemview.findviewbyid(r.id.contact_display_name); } }
}
and recycler view
public abstract class cursorrecyclerviewadapter<vh extends recyclerview.viewholder> extends recyclerview.adapter<vh> { @suppresswarnings("unused") private static final string tag = cursorrecyclerviewadapter.class.getsimplename(); protected context mcontext; private cursor mcursor; private boolean mdatavalid; private int mrowidcolumn; private string mid; private datasetobserver mdatasetobserver; public cursorrecyclerviewadapter(context context, cursor cursor, string id) { mcontext = context; mcursor = cursor; mdatavalid = cursor != null; mrowidcolumn = mdatavalid ? mcursor.getcolumnindex(id) :-1; mid = id; mdatasetobserver = new notifyingdatasetobserver(this); if (mcursor != null) { mcursor.registerdatasetobserver(mdatasetobserver); } } @suppresswarnings("unused") protected cursor getcursor() { return mcursor; } @override public vh oncreateviewholder(viewgroup parent, int viewtype) { return null; } @override public void onbindviewholder(vh holder, int position) { if (!mdatavalid) { throw new illegalstateexception("this should called when cursor valid"); } if (!mcursor.movetoposition(position)) { throw new illegalstateexception("couldn't move cursor position " + position); } onbindviewholder(holder, mcursor); } @override public int getitemcount() { if (mdatavalid && mcursor != null) { return mcursor.getcount(); } return 0; } @override public long getitemid(int position) { if (mdatavalid && mcursor != null && mcursor.movetoposition(position)) { return mcursor.getlong(mrowidcolumn); } return 0; } @override public void sethasstableids(boolean hasstableids) { super.sethasstableids(true); } public abstract void onbindviewholder(vh viewholder, cursor cursor); @suppresswarnings("unused") public void changecursor(cursor cursor) { cursor old = swapcursor(cursor); if (old != null) { old.close(); } } public cursor swapcursor(cursor newcursor) { if (newcursor == mcursor) { return null; } final cursor oldcursor = mcursor; if (oldcursor != null && mdatasetobserver != null) { oldcursor.unregisterdatasetobserver(mdatasetobserver); } mcursor = newcursor; if (mcursor != null) { if (mdatasetobserver != null) { mcursor.registerdatasetobserver(mdatasetobserver); } mrowidcolumn = newcursor.getcolumnindexorthrow(mid); mdatavalid = true; notifydatasetchanged(); } else { mrowidcolumn = -1; mdatavalid = false; notifydatasetchanged(); //there no notifydatasetinvalidated() method in recyclerview.adapter } return oldcursor; } public void setdatavalid(boolean datavalid) { mdatavalid = datavalid; } private class notifyingdatasetobserver extends datasetobserver { private recyclerview.adapter adapter; public notifyingdatasetobserver(recyclerview.adapter adapter) { this.adapter = adapter; } @override public void onchanged() { super.onchanged(); ((cursorrecyclerviewadapter) adapter).setdatavalid(true); adapter.notifydatasetchanged(); } @override public void oninvalidated() { super.oninvalidated(); ((cursorrecyclerviewadapter) adapter).setdatavalid(false); } }
this want show name , number of contact selected
public class add_friend extends appcompatactivity {
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_add__friend); }
}
this layout want name , phone number appear
' <?xml version="1.0" encoding="utf-8"?> <relativelayout xml :android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:gravity="center_vertical" android:layout_marginleft="16dp" android:layout_marginright="16dp" android:layout_margintop="8dp" android:layout_marginbottom="8dp" android:layout_height="wrap_content"> <relativelayout android:layout_width="match_parent" android:layout_height="match_parent"> <textview android:id="@+id/contact_display_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxlines="1" android:text="contact username" android:textcolor="@android:color/black" android:textsize="20sp" android:layout_margintop="26dp" android:layout_below="@+id/contact_display" android:layout_alignparentleft="true" android:layout_alignparentstart="true"/> <textview android:id="@+id/number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxlines="1" android:text="0986857456" android:textcolor="@android:color/black" android:textsize="20sp" android:layout_below="@+id/contact_display_name" android:layout_alignleft="@+id/contact_display_name" android:layout_alignstart="@+id/contact_display_name" android:layout_margintop="20dp"/> <button android:id="@+id/button8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="add friend" android:layout_below="@+id/contact_display_name" android:layout_alignparentright="true" android:layout_alignparentend="true"/> <de.hdodenhof.circleimageview.circleimageview android:id="@+id/contact_display" android:layout_width="90dp" android:layout_height="90dp" android:src="@drawable/prof_icon" android:layout_alignparenttop="true" android:layout_alignparentleft="true" android:layout_alignparentstart="true"/> </relativelayout>
this how want appear this how want appear
intent contintent= new intent(mcontext.getapplicationcontext(), add_friend.class );
after line put data :
contintent.putextra("name", data1); contintent.putextra("number", data2);
and data in oncreate
add_friend
activity this:
string name = getintent().getstringextra("name"); string number = getintent().getstringextra("number");
Comments
Post a Comment