android - Refreshing value at a list view when activity is re-opened back from another activity -
i need solve following concern have related activity.
an activity has list view showing json objects. when users taps on row, activity opens showing more details selected object. on second activity, user may click on button vote object. amount of votes increased one. then, if user goes previous activity, amount of given votes showed not updated, should updated taking account vote given user.
at first activity (list view) number of votes field given previous activity through intent:
first activity code (list):
import java.util.arraylist; import java.util.hashmap; import android.content.context; import android.content.intent; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.view.onclicklistener; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.imageview; import android.widget.textview; public class empresas_listviewadapter extends baseadapter { // declare variables context context; layoutinflater inflater; arraylist<hashmap<string, string>> data; imageloader imageloader; hashmap<string, string> resultp = new hashmap<string, string>(); public empresas_listviewadapter(context context, arraylist<hashmap<string, string>> arraylist) { this.context = context; data = arraylist; imageloader = new imageloader(context); } @override public int getcount() { return data.size(); } @override public object getitem(int position) { return null; } @override public long getitemid(int position) { return 0; } public view getview(final int position, view convertview, viewgroup parent) { // declare variables textview valoracionempresa; textview nombreempresa; textview direccionempresa; imageview strimagen; textview descripcionempresa; textview telefonoempresa; textview facebookempresa; textview emailempresa; textview textooferta; textview horarioempresa; textview latitudempresa; textview longitudempresa; textview idempresa; inflater = (layoutinflater) context .getsystemservice(context.layout_inflater_service); view itemview = inflater.inflate(r.layout.empresas_listview_item, parent, false); // position resultp = data.get(position); // locate textviews in listview_item.xml valoracionempresa = (textview) itemview.findviewbyid(r.id.valoracionempresa); nombreempresa = (textview) itemview.findviewbyid(r.id.nombreempresa); direccionempresa = (textview) itemview.findviewbyid(r.id.direccionempresa); // locate imageview in listview_item.xml strimagen = (imageview) itemview.findviewbyid(r.id.strimagen); // capture position , set results textviews valoracionempresa.settext(resultp.get(empresas_mainactivity.valoracionempresa)); nombreempresa.settext(resultp.get(empresas_mainactivity.nombreempresa)); direccionempresa.settext(resultp.get(empresas_mainactivity.direccionempresa)); // capture position , set results imageview // passes flag images url imageloader.class imageloader.displayimage(resultp.get(empresas_mainactivity.strimagen), strimagen); // capture listview item click itemview.setonclicklistener(new onclicklistener() { @override public void onclick(view arg0) { // position resultp = data.get(position); intent intent = new intent(context, empresas_singleitemview.class); // pass data rank intent.putextra("valoracionempresa", resultp.get(empresas_mainactivity.valoracionempresa)); // pass data country intent.putextra("nombreempresa", resultp.get(empresas_mainactivity.nombreempresa)); // pass data population intent.putextra("direccionempresa",resultp.get(empresas_mainactivity.direccionempresa)); // pass data flag intent.putextra("strimagen", resultp.get(empresas_mainactivity.strimagen)); intent.putextra("descripcionempresa",resultp.get(empresas_mainactivity.descripcionempresa)); intent.putextra("telefonoempresa",resultp.get(empresas_mainactivity.telefonoempresa)); intent.putextra("facebookempresa",resultp.get(empresas_mainactivity.facebookempresa)); intent.putextra("emailempresa",resultp.get(empresas_mainactivity.emailempresa)); intent.putextra("textooferta",resultp.get(empresas_mainactivity.textooferta)); intent.putextra("horarioempresa",resultp.get(empresas_mainactivity.horarioempresa)); intent.putextra("latitudempresa",resultp.get(empresas_mainactivity.latitudempresa)); intent.putextra("longitudempresa",resultp.get(empresas_mainactivity.longitudempresa)); intent.putextra("idempresa",resultp.get(empresas_mainactivity.idempresa)); // start singleitemview class context.startactivity(intent); } }); return itemview; } } second activity code (detail)
import java.io.bufferedinputstream; import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.net.httpurlconnection; import java.net.url; import java.util.arraylist; import java.util.list; import org.apache.http.httpresponse; import org.apache.http.namevaluepair; import org.apache.http.client.clientprotocolexception; import org.apache.http.client.httpclient; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.defaulthttpclient; import org.apache.http.message.basicnamevaluepair; import org.apache.http.util.bytearraybuffer; import android.app.activity; import android.content.activitynotfoundexception; import android.content.context; import android.content.intent; import android.net.uri; import android.os.asynctask; import android.os.build; import android.os.bundle; import android.util.log; import android.view.view; import android.widget.imageview; import android.widget.progressbar; import android.widget.textview; import android.widget.toast; public class empresas_singleitemview extends activity { // declare variables string valoracionempresa; string nombreempresa; string direccionempresa; string descripcionempresa; string telefonoempresa; string facebookempresa; string emailempresa; string textooferta; string horarioempresa; string latitudempresa; string longitudempresa; string imagenstrimagen; string idempresa; string position; private progressbar pb; url aurl; /* filled , displayed later. */ string astring = null; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // view singleitemview.xml imageloader imageloader = new imageloader(this); setcontentview(r.layout.empresas_singleitemview); intent = getintent(); // result of rank valoracionempresa = i.getstringextra("valoracionempresa"); // result of country nombreempresa = i.getstringextra("nombreempresa"); // result of population direccionempresa = i.getstringextra("direccionempresa"); descripcionempresa = i.getstringextra("descripcionempresa"); telefonoempresa = i.getstringextra("telefonoempresa"); facebookempresa = i.getstringextra("facebookempresa"); emailempresa = i.getstringextra("emailempresa"); textooferta = i.getstringextra("textooferta"); horarioempresa = i.getstringextra("horarioempresa"); latitudempresa = i.getstringextra("latitudempresa"); longitudempresa = i.getstringextra("longitudempresa"); idempresa = i.getstringextra("idempresa"); // result of flag imagenstrimagen = i.getstringextra("strimagen"); // locate textviews in singleitemview.xml textview txtvaloracionempresa = (textview) findviewbyid(r.id.valoracionempresa); textview txtnombreempresa = (textview) findviewbyid(r.id.nombreempresa); textview txtdireccionempresa = (textview) findviewbyid(r.id.direccionempresa); textview txtdescripcionempresa = (textview) findviewbyid(r.id.descripcionempresa); textview txtofertaempresa = (textview) findviewbyid(r.id.textooferta); textview txthorarioempresa = (textview) findviewbyid(r.id.horarioempresa); // locate imageview in singleitemview.xml imageview imagenempresa = (imageview) findviewbyid(r.id.strimagen); // set results textviews txtvaloracionempresa.settext(valoracionempresa); txtnombreempresa.settext(nombreempresa); txtdireccionempresa.settext(direccionempresa); txtdescripcionempresa.settext(descripcionempresa); txtofertaempresa.settext(textooferta); txthorarioempresa.settext(horarioempresa); // capture position , set results imageview // passes flag images url imageloader.class imageloader.displayimage(imagenstrimagen, imagenempresa); } public void openfacebook(view view) { string url = "http://es-es.facebook.com/pages/"+facebookempresa; intent = new intent(intent.action_view); i.setdata(uri.parse(url)); startactivity(i); } public void openemail(view view) { intent = new intent(intent.action_send); i.settype("message/rfc822"); i.putextra(intent.extra_email , new string[]{emailempresa}); i.putextra(intent.extra_subject, "email desde vive gran canaria app"); i.putextra(intent.extra_text , "escribe aqui el texto de tu mensaje"); try { startactivity(intent.createchooser(i, "send mail...")); } catch (android.content.activitynotfoundexception ex) { toast.maketext(empresas_singleitemview.this, "there no email clients installed.", toast.length_short).show(); } } public void openllamar(view view) { try { intent callintent = new intent(intent.action_call); callintent.setdata(uri.parse("tel:"+telefonoempresa)); startactivity(callintent); } catch (activitynotfoundexception e) { log.e("helloandroid dialing example", "call failed", e); } } public void openvotar(view view) { log.i("response", "hemos entrado en openvotar: "); connectiontask task = new connectiontask(); string[] params = new string[2]; string url = "http://xxxxx/cambiarvaloracionempresa.php?id="+idempresa; params[0] = url; //params[1] = somethingelseifneeded; task.execute(params); } private class connectiontask extends asynctask<string, void, string>{ @override protected string doinbackground(string... urls) { url aurl; /* filled , displayed later. */ string astring = null; try { aurl = new url( urls[0]); /* open connection url. */ final httpurlconnection ahttpurlconnection = (httpurlconnection) aurl.openconnection(); /* define inputstreams read urlconnection. */ inputstream ainputstream = ahttpurlconnection.getinputstream(); bufferedinputstream abufferedinputstream = new bufferedinputstream( ainputstream); /* read bytes buffer until there nothing more read(-1) */ bytearraybuffer abytearraybuffer = new bytearraybuffer(50); int current = 0; while ((current = abufferedinputstream.read()) != -1) { abytearraybuffer.append((byte) current); } /* convert bytes read string. */ astring = new string(abytearraybuffer.tobytearray()); } catch (ioexception e) { // log.d(tag, e.tostring()); } return astring; } @override protected void onpostexecute(string result) { textview atextview;log.i("response json", result); textview txtvaloracionempresa = (textview) findviewbyid(r.id.valoracionempresa); txtvaloracionempresa.settext(result); // result got connection //atextview.settext(result); } } } how refresh number of votes on first activity (list view) when user goes second activity (detail view)
you need call notifydatasetchanged() on adapter in order refresh listview.
adapter.notifydatasetchanged() should called after every change in datset. if doing in loop
for (int = ; ; ){ … … adapter.additem(item); adapter.notifydatasetchanged(); } otherwise can call after loop.
also, notifydatasetchanged() should called ui thread
check out http://developer.android.com/reference/android/widget/baseadapter.html#notifydatasetchanged()
also, helpful video
Comments
Post a Comment