android - OnItemLongClickListener only deletes SD card file once, then no more -


i have arraylist<> in listview, need adapter. list items saved file in activity, , load sd card once cutecollection.java activity runs. put onitemlongclicklistener on each list item, when click it, item not removed list (the adapter), sd card. however, need not have full file name, when displaying title in listview, used substring take off file extension, works well. new problem developed... click listener wouldn't delete file sd card (since needs full file name extension know 1 delete). work around that, used title of file, , through stringbuilder, added .txt extension onto string. delete 1 item file, no more. before messed removing extension, worked fine. delete list item, long-clicking , pressing ok.

anyone know why works once, doesn't delete anymore? remove item list (the adapter), when rerun activity, old ones load again (except first 1 deleted). tells me sd card had 1 deleted it. need able delete many want. help.

update:

i logged both singlefile , sb.tostring() , looks sb.tostring() has first long-click file name on 2nd long-click well. singlefile file name has 2 unique file names both clicks, should, since there 2 files in list.

before click:

value of singlefile is: /storage/emulated/0/documents/cutewords/poem_40.txt value of singlefile is: /storage/emulated/0/documents/cutewords/poem_89.txt 

1st click:

value of sb.tostring() is: poem_89.txt 

2nd click:

value of sb.tostring() is: poem_89.txt 

my fragment below:

texttab.java single tab in cutecollection.java activity.

package org.azurespot.cutecollection;  import android.app.alertdialog; import android.content.dialoginterface; import android.os.bundle; import android.os.environment; import android.support.v4.app.fragment; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.adapterview.onitemclicklistener; import android.widget.adapterview.onitemlongclicklistener; import android.widget.listview;  import org.azurespot.r;  import java.io.bufferedreader; import java.io.file; import java.io.filereader; import java.io.ioexception; import java.util.arraylist;   /**  * created mizu on 2/8/15.  */ public class texttab extends fragment {      private arraylist<poemlistitem> poems = new arraylist<>();     private listviewpoemadapter adapter;     private listview listview;     string[] allsdcardfiles = null;     stringbuilder text;     poemlistitem wordsfromfile;     stringbuilder sb = new stringbuilder();       @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {          // inflate layout fragment         view v = inflater.inflate(r.layout.text_tab, container, false);         adapter = new listviewpoemadapter(getactivity(), poems);         // attach adapter listview         listview = (listview) v.findviewbyid(r.id.text_list_view);         listview.setadapter(adapter);          // read contents of sd card         loadsdcard();          // add default icon/lines remaining arraylist, if less 24 files on sd card         (int = 0; < (24 - allsdcardfiles.length); i++) {             poemlistitem sampleitem = new poemlistitem(" ", " ");             adapter.add(sampleitem);             adapter.notifydatasetchanged();             i++;         }           setuplistviewlistener();          return v;      }      private void loadsdcard(){         // gets directory cutewords sd card         file basedir = environment.getexternalstoragedirectory();         file cutewordsdir = new file(basedir, "/documents/cutewords");         // lists files in cutewords, loads in files[] array         file[] files = cutewordsdir.listfiles();           (file singlefile : files) {             //read text file, put each line stringbuilder             text = new stringbuilder();             try {                 bufferedreader br = new bufferedreader(new filereader(singlefile));                 string line;                  while ((line = br.readline()) != null) {                     text.append(line);                     text.append('\n');                      // full file name ext. , text in file                     wordsfromfile = new poemlistitem(singlefile.getname(), text.tostring());                      // name title (not file extension)                     string withext = wordsfromfile.gettitle();                     string justtitle = withext.substring(0, withext.length() - 4);                     wordsfromfile.settitle(justtitle);                      adapter.add(wordsfromfile);                     adapter.notifydatasetchanged();                  }             } catch (ioexception e) {                 e.printstacktrace();             }         }         // number of files in cutewords directory         allsdcardfiles =  new string[files.length];     }       // can edit of list items     private void setuplistviewlistener() {         listview.setonitemclicklistener(new onitemclicklistener() {             @override             public void onitemclick(adapterview<?> adapter,                                         view item, int pos, long id){               }         });          // delete item         listview.setonitemlongclicklistener(new onitemlongclicklistener() {             @override             public boolean onitemlongclick(adapterview<?> aview, view item,                                            final int pos, long id) {                  new alertdialog.builder(getactivity())                         .settitle("delete")                         .setmessage("delete these cute words?")                         .setpositivebutton(android.r.string.yes, new dialoginterface.onclicklistener() {                             public void onclick(dialoginterface dialog, int which) {                                 // delete adapter                                 poems.remove(pos);                                 adapter.notifydatasetchanged();                                 // add extension on file name                                 sb.append(wordsfromfile.gettitle() + ".txt");                                 // file name delete                                 file file = new file(environment.getexternalstoragedirectory(),                                         "/documents/cutewords/" + sb.tostring());                                 file.delete();                             }                         })                         .setnegativebutton(android.r.string.no, new dialoginterface.onclicklistener() {                             public void onclick(dialoginterface dialog, int which) {                                  // nothing                              }                         })                         .seticon(android.r.drawable.ic_dialog_alert)                         .show();      return true;             }         });     } } 

finally figure out. deletes once because did not refresh writing file again, after each delete. so, in case, needed run loadsdcard() method after deleting file. added method call @ end of alertdialog box, right after file.delete(). had nothing pos variable being final. basically, write file delete, have new list. otherwise thinks old list in place , not change positions. rewriting re-creates list.

// delete item         listview.setonitemlongclicklistener(new onitemlongclicklistener() {             @override             public boolean onitemlongclick(adapterview<?> aview, view item,                                                         final int pos, long id) {                  new alertdialog.builder(getactivity())                         .settitle("delete")                         .setmessage("delete these cute words?")                         .setpositivebutton(android.r.string.yes, new dialoginterface.onclicklistener() {                             public void onclick(dialoginterface dialog, int which) {                                 // delete arraylist first                                 poems.remove(pos);                                 adapter.notifydatasetchanged();                                 // file name delete                                 file file = new file(environment.getexternalstoragedirectory(),                                         "/documents/cutewords/" + wordsfromfile.gettitle());                                 file.delete();                                 // after each item delete, must refresh load can delete again                                 loadsdcard();                              }                         })                         .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;             }         }); 

Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

ios - Possible to get UIButton sizeThatFits to work? -