android - TextView in custom GridView adapter does not update, but ImageView does -


i have custom gridview adapter takes audiogriditem object parameter in constructor. each object has 2 imageviews , 1 textview. when delete grid position, using long click listener, should erase file (on sd card) put placeholder drawable in place of previous image (uri). should set textview empty string. not work. imageviews update, textview title of file still lingers in old spot. results in in arraylist moving spot, yet titles of file still in old spot. yet, curiously, when switch photo tab, return audio tab, textview updates (but won't update when switch video or write tab, strange.)

i clear both adapter , arraylist before reload (re-run asynctask).

i have seen other posts on here problem, have not found works me. this 1 talks using right textview, have one, , using right. said, other code involving textview incorrect? it's thing can think of since use notifydatasetchanged() on place, know adapter updated (plus imageviews change, that's hint). logic using in long click listener to:

  1. delete file @ position on sd card

  2. clear both adapter , list (then call notifydatasetchanged())

  3. reload sd card scratch calling asynctask again

any ideas? can see in photo, highlighted icons ones have sound file , drawable attached imageviews (which play correctly), darker icons ones placeholders, , file tried long click delete, shows placeholder icon (as should) lingering title in textview. how rid of this?

enter image description here

audiotab.java

package org.azurespot.cutecollection.audiotab;  import android.app.alertdialog; import android.app.progressdialog; import android.content.dialoginterface; import android.graphics.drawable.drawable; import android.media.mediaplayer; import android.net.uri; import android.os.asynctask; import android.os.bundle; import android.os.environment; import android.support.v4.app.fragment; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.gridview;  import org.azurespot.r;  import java.io.file; import java.io.ioexception; import java.util.arraylist;  /**  * created mizu on 2/8/15.  */ public class audiotab extends fragment {      private gridview gridview;     private gridviewaudioadapter audioadapter;     private progressdialog progressdialog;     private string[] numbersdcardfiles = null;     file[] files;     arraylist<audiogriditem> audiofiles = new arraylist<>();     audiogriditem audiogriditem;     audiogriditem drawable;     audiogriditem drawablesound;     mediaplayer mp;     uri drawableoff;     string audiotitle;      public audiotab(){         super();     }      @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {         // inflate layout fragment         view v = inflater.inflate(r.layout.audio_tab, container, false);          mp = new mediaplayer();          // instantiate progress dialog         progressdialog = new progressdialog(getactivity());          // fragments, make sure include rootview when finding id         gridview = (gridview) v.findviewbyid(r.id.audio_grid);         // create custom adapter object         audioadapter = new gridviewaudioadapter(getactivity(), audiofiles);         // set adapter gridview         gridview.setadapter(audioadapter);          if(audioadapter.getcount() == 0) {             // load contents of sd card through asynctask             new audiodownloadertask().execute();         }          setupgridviewlistener();           return v;     }      private class audiodownloadertask extends asynctask<object, void, audiogriditem> {          @override         protected void onpreexecute() {             super.onpreexecute();              progressdialog.setmessage("loading cute collection ...");             //set progress bar cancelable on button             progressdialog.setcancelable(true);             progressdialog.show();         }          @override         protected audiogriditem doinbackground(object... params) {              retrieveaudio();              return null;          }          @override         protected void onpostexecute(audiogriditem result) {             progressdialog.dismiss();              // add sound off drawable replace song files when there none             (int = 0; < (15 - numbersdcardfiles.length); i++) {                 audioadapter.add(drawable);             }              audioadapter.notifydatasetchanged();          }     }      public void retrieveaudio() {          // creates new audiogriditem object drawable source         drawablesound = new audiogriditem(null, getresources().getdrawable                 (r.drawable.ic_sounds_placeholder_on), null);          try {             // gets directory cute videos sd card             file cutevideosdir = new file(environment.getexternalstoragepublicdirectory                     (environment.directory_podcasts), "cute sounds");              // puts list files array             files = cutevideosdir.listfiles();              // number of files in cute sounds directory             numbersdcardfiles =  new string[files.length];              (file singlefile : files) {                 // both audio file , audio title                 uri audiouri = uri.fromfile(singlefile);                 audiotitle = singlefile.getname();                  // sound on drawable object                 drawable drawableon = drawablesound.getdrawable();                  // since in loop, sound on drawable added same files                 audiogriditem = new audiogriditem(audiouri, drawableon, audiotitle);                  // add uri, drawable (sound on) , title arraylist                 audiofiles.add(audiogriditem);             }              // put sound off drawable audiogriditem object (as uri, no drawable or string)             drawableoff = uri.parse("android.resource://org.azurespot/drawable/"                                                             + r.drawable.ic_sounds_placeholder);             drawable = new audiogriditem(drawableoff, null, null);          } catch (exception e) {             e.printstacktrace();         }     }        private void setupgridviewlistener() {         gridview.setonitemclicklistener(new adapterview.onitemclicklistener() {             @override             public void onitemclick(adapterview<?> adapterview,                                     view item, int pos, long id) {                  audiogriditem currentitem = audioadapter.getitem(pos);                  mp.setoncompletionlistener(new mediaplayer.oncompletionlistener(){                     public void oncompletion(mediaplayer mediaplayer){                         mediaplayer.reset();                     }                 });                  if(!(audioadapter.getitem(pos).equals(drawable))) {                      if(currentitem == audioadapter.getitem(pos)) {                          if (mp.isplaying()) {                             mp.reset();                         }                         else {                             uri soundfile = (audioadapter.getitem(pos)).getaudio();                             try {                                 mp.setdatasource(getactivity(), soundfile);                                 mp.prepare();                                 mp.start();                             } catch (ioexception e) {                                 e.printstacktrace();                             }                         }                     }                     else{                          uri soundfile = (audioadapter.getitem(pos)).getaudio();                         try {                             mp.setdatasource(getactivity(), soundfile);                             mp.prepare();                             mp.start();                         } catch (ioexception e) {                             e.printstacktrace();                         }                      }                  }              }          });          // delete uri item         gridview.setonitemlongclicklistener(new adapterview.onitemlongclicklistener() {             @override             public boolean onitemlongclick(adapterview<?> aview, view item,                                            final int pos, long id) {                  mp.reset();                  // insures placeholder drawable not clickable                 if (!(audioadapter.getitem(pos)).equals(drawable)) {                      new alertdialog.builder(getactivity())                             .settitle("delete")                             .setmessage("delete cute sound?")                             .setpositivebutton(android.r.string.yes, new dialoginterface.onclicklistener() {                                 public void onclick(dialoginterface dialog, int which) {                                     // delete arraylist first                                     audiofiles.remove(pos);                                      // file name delete sd card                                     string name = files[pos].getname();                                     file file = new file(environment.getexternalstoragepublicdirectory                                             (environment.directory_podcasts), "cute sounds" + "/" + name);                                     file.delete();                                      audiogriditem.setaudiotitle(" ");                                      // after each item delete, replace default icon, , empty string                                     audioadapter.add(new audiogriditem(drawableoff, null, null));                                      // clear old list first                                     audioadapter.clear();                                     audiofiles.clear();                                     audioadapter.notifydatasetchanged();                                      // reload files, positioning right when open                                     new audiodownloadertask().execute();                                      log.d("tag", "reached after async runs again.");                                  }                             })                             .setnegativebutton(android.r.string.no, new dialoginterface.onclicklistener() {                                 public void onclick(dialoginterface dialog, int which) {                                      // nothing                                     dialog.cancel();                                 }                             })                             .seticon(android.r.drawable.ic_dialog_alert)                             .show();                 }                  return true;             }          });      } } 

gridviewaudioadapter.java

package org.azurespot.cutecollection.audiotab;  import android.content.context; import android.graphics.drawable.drawable; import android.net.uri; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.framelayout; import android.widget.imageview; import android.widget.textview;  import org.apache.commons.io.filenameutils; import org.azurespot.r;  import java.util.arraylist;  /**  * created mizu on 2/8/15.  */ public class gridviewaudioadapter extends arrayadapter<audiogriditem> {      private textview audiotitleview;     int position;     viewholder holder = null;     context context;     string rootname;       public gridviewaudioadapter(context context, arraylist<audiogriditem> audio) {         super(context, 0, audio);         this.context = context;      }       @override     public view getview(int position, view itemview, viewgroup parent) {          this.position = position;          if (itemview == null) {             itemview = layoutinflater.from(getcontext())                     .inflate(r.layout.audio_tab_item, parent, false);              holder = new viewholder();              holder.audioviewfile = (imageview) itemview.findviewbyid(r.id.audio_file);             holder.audioviewicon = (imageview) itemview.findviewbyid(r.id.audio_icon);             audiotitleview = (textview) itemview.findviewbyid(r.id.audio_title);              // stores holder view             itemview.settag(holder);          } else {              holder = (viewholder)itemview.gettag();         }           // position of item clicked in gridview         final audiogriditem audiogriditem = getitem(position);          if (audiogriditem != null) {              // getting uri here might give file or off drawable             uri audiouri = audiogriditem.getaudio();             // ever on drawable             drawable drawableon = audiogriditem.getdrawable();              // set text             string audiotitle = audiogriditem.getaudiotitle();             if (audiotitle != null) {                 rootname = filenameutils.removeextension(audiotitle);                 audiotitleview.settext(rootname);             } else                 audiotitleview.settext(" ");              // set uri or drawable imageview slots             holder.audioviewfile.setimageuri(audiouri);             holder.audioviewicon.setimagedrawable(drawableon);               // positioning file uri in gridview slot             holder.audioviewfile.setscaletype(imageview.scaletype.center_crop);             holder.audioviewfile.setlayoutparams(new framelayout.layoutparams                     (220, 220));              // positioning drawable icon in gridview slot             holder.audioviewicon.setscaletype(imageview.scaletype.center_crop);             holder.audioviewicon.setlayoutparams(new framelayout.layoutparams                     (220, 220));          }          return itemview;      }      public class viewholder{         imageview audioviewfile;         imageview audioviewicon;     } } 

audiogriditem.java

package org.azurespot.cutecollection.audiotab;  import android.graphics.drawable.drawable; import android.net.uri;  /**  * created mizu on 4/26/15.  */ public class audiogriditem {      private uri audio;     private string audiotitle;     drawable drawableon;      public audiogriditem(uri audio, drawable drawable, string autotitle) {         super();         this.audio = audio;         this.drawableon = drawable;         this.audiotitle = autotitle;     }      public uri getaudio() {          return audio;     }      public void setaudio(uri audio){          this.audio = audio;     }      public drawable getdrawable(){          return drawableon;     }      public void setdrawable(drawable drawable){          this.drawableon = drawable;     }      public string getaudiotitle(){          return audiotitle;     }      public void setaudiotitle(string audiotitle){          this.audiotitle = audiotitle;      }  } 

hmm check out

in gridviewaudioadapter.java

public class gridviewaudioadapter extends arrayadapter<audiogriditem> { private textview audiotitleview; // @ madam int position; 

in getview method

holder = new viewholder(); holder.audioviewfile = (imageview)itemview.findviewbyid(r.id.audio_file); holder.audioviewicon = (imageview)itemview.findviewbyid(r.id.audio_icon); audiotitleview = (textview)itemview.findviewbyid(r.id.audio_title); 

i not have explanation assembling thoughts, difference is, imageviews ok not textview looking @ getview put textview declaration in viewholder getview this

holder = new viewholder(); holder.audioviewfile = (imageview)itemview.findviewbyid(r.id.audio_file); holder.audioviewicon = (imageview)itemview.findviewbyid(r.id.audio_icon); holder.audiotitleview=(textview)itemview.findviewbyid(r.id.audio_title); 

try , see if helps


Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -