android - How to make a ListActivity with custom List Item with nested clickable Button -
now have activity, shows list of usernames. ok works. need show custom listview item username @ left , button @ right (this button call programatically given phone number).
i know have custom adapter, skills low. , dont know how use when have done.
can me making easy custom adapter manage listitem 1 textview , 1 button , giving me code use custom adapter?
the adapter should able use new list_item2.xml:
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <textview android:id="@+id/friendname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:padding="10dp" android:textsize="16sp"/> <button android:id="@+id/callbutton" android:layout_alignbaseline="@id/friendname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="call" android:width="100px" android:layout_alignparentright="true"/> </relativelayout>
this code use now:
list_item.xml:
xml version="1.0" encoding="utf-8"?> <textview xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:textsize="16sp" > </textview>
this listactivity class:
public class allactivity extends listactivity { remoteconnection con; //conexion remota //private mydbadapter mdbhelper; private list<friend> friends; //lista de amigos private list<string> usernames; //lista de usernames de amigos, para rellenar el listview //private list<permission> permissions; //para almacenar la config local de mi app, mostrarme o no en el mapa... static sharedpreferences settings; static sharedpreferences.editor configeditor; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); settings=preferencemanager.getdefaultsharedpreferences(this.getapplicationcontext()); configeditor = settings.edit(); friends = new arraylist<friend>(); usernames = new arraylist<string>(); //mdbhelper=myapplication.getdatabaseadapter(); con = new remoteconnection(); actualizar(); } protected void onactivityresult(int requestcode, int resultcode, intent data) { if (resultcode == 1) { setresult(1); finish(); } } public void onresume() { super.onresume(); actualizar(); } public void actualizar() { //friends = con.retrievefriends(settings.getstring("login","")); friends = myapplication.getdatabaseadapter().retrieveallfriends(); usernames.clear(); (int i=0;i<friends.size();i++) //for (int i=0;i<permissions.size();i++) { usernames.add(i,friends.get(i).getfullname()); //if (friends.get(i).getlastposition()!=null) // usernames.add(i,friends.get(i).getlastposition().getpositiontimeformated()); } setlistadapter(new arrayadapter<string>(this, r.layout.list_item3, usernames)); listview lv = getlistview(); lv.settextfilterenabled(true); lv.setonitemclicklistener(new onitemclicklistener() { public void onitemclick(adapterview<?> parent, view view, int position, long id) { bundle bundle = new bundle(); //bundle letter bundle.putstring ("user", friends.get(position).getfullname()); //arg1 keyword of txt, arg2 txt bundle.putstring ("email", friends.get(position).getemail()); bundle.putstring ("permission", friends.get(position).getpermission()); intent i=null; if (friends.get(position).getpermission().equals("total")) = new intent (allactivity.this, locate.class); else if (friends.get(position).getpermission().equals("perhours")) = new intent (allactivity.this, locateperhours.class); else = new intent (allactivity.this, locateperdays.class); i.putextras(bundle); startactivity(i); //startactivityforresult(i, 0); } }); } }
i edited code compatible yours
i write code modification achieve want... call initialactivity yo yhe listactivity , populate list string array (populate them not problem) so, maybe other things you...
package com.franco.test2; import java.util.arraylist; import android.app.listactivity; import android.content.context; import android.os.bundle; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.view.onclicklistener; import android.view.viewgroup; import android.widget.adapterview; import android.widget.adapterview.onitemclicklistener; import android.widget.arrayadapter; import android.widget.button; import android.widget.listview; import android.widget.textview; public class initialactivity extends listactivity { // private list<friend> friends; //lista de amigos private arraylist<string> usernames; //lista de usernames de amigos, para rellenar el listview private string[] usernames_array; private activitylist listadapter; /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // setcontentview(r.layout.main); usernames_array = getresources().getstringarray(r.array.usernames); actualizar(); } public void actualizar() { //friends = con.retrievefriends(settings.getstring("login","")); // friends = myapplication.getdatabaseadapter().retrieveallfriends(); // usernames.clear(); // (int i=0;i<usernames.size();i++) //for (int i=0;i<permissions.size();i++) // { // usernames.add(i,friends.get(i).getfullname()); //if (friends.get(i).getlastposition()!=null) // usernames.add(i,friends.get(i).getlastposition().getpositiontimeformated()); // } usernames = new arraylist<string>(); for(int = 0 ; < usernames_array.length ; i++){ usernames.add(usernames_array[i]); } listadapter = new activitylist(initialactivity.this, android.r.id.text1, usernames); // setlistadapter(new arrayadapter<string>(this, r.layout.list_item3, usernames)); setlistadapter(listadapter); listview lv = getlistview(); lv.settextfilterenabled(true); lv.setonitemclicklistener(new onitemclicklistener() { public void onitemclick(adapterview<?> parent, view view, int position, long id) { //startactivityforresult(i, 0); } }); } @override protected void onlistitemclick(listview l, view v, int position, long id) { bundle bundle = new bundle(); //bundle letter bundle.putstring ("user", listadapter.getitem(position)); //arg1 keyword of txt, arg2 txt // bundle.putstring ("user", friends.get(position).getfullname()); //arg1 keyword of txt, arg2 txt // bundle.putstring ("email", friends.get(position).getemail()); // bundle.putstring ("permission", friends.get(position).getpermission()); // intent i=null; // if (friends.get(position).getpermission().equals("total")) // = new intent (allactivity.this, locate.class); // else if (friends.get(position).getpermission().equals("perhours")) // = new intent (allactivity.this, locateperhours.class); // else // = new intent (allactivity.this, locateperdays.class); // // i.putextras(bundle); // startactivity(i); } private onclicklistener callbtnlistener = new onclicklistener(){ public void onclick(view v) { log.i("info","username: " + v.gettag()); }}; class activitylist extends arrayadapter<string>{ public activitylist(context context, int textviewresourceid, arraylist<string> objects) { super(context, textviewresourceid, objects); } @override public view getview(int position, view convertview, viewgroup parent) { viewholder holder; if(convertview == null){ layoutinflater inflater = layoutinflater.from(initialactivity.this); convertview = inflater.inflate(r.layout.new_list_item2, parent, false); holder = new viewholder(); holder.text = (textview)convertview.findviewbyid(r.id.friendname); holder.button = (button)convertview.findviewbyid(r.id.callbutton); convertview.settag(holder); }else{ holder = (viewholder) convertview.gettag(); } holder.text.settext(getitem(position)); holder.button.setonclicklistener(callbtnlistener); holder.button.settag( getitem(position) ); return convertview; } } static class viewholder{ textview text; button button; } }
i deleted last line (onclick) , add onclicklistener on list activity.
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <textview android:id="@+id/friendname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:padding="10dp" android:textsize="16sp"/> <button android:id="@+id/callbutton" android:layout_alignbaseline="@id/friendname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="call" android:width="100px" android:layout_alignparentright="true"/> </relativelayout>
i tested in device , works, delete dataholder class.
the other things bundle map, intent, commented because think not problem.
cheers.
Comments
Post a Comment