Android: Viewing a ListView Item After Delete Operation Views Deleted Item -


i attempting crud operations using sqlite database in android list view. using fragment, activity, , custom base adapter. can highlight, delete or edit item, , update list view , adapters.

i run problem when delete item (the list view , adapter updated) , attempt select , highlight item after. edit operation references deleted item. when delete item , reload activity works intended.

this leading me believe list view refresh , database operations working intended adapter not updating after delete. perhaps has way passing selected position persistent highlighting purposes.

code follows. please let me know if need me post more or have morsels of advice improvement.

championlistfragment.java (our primary list view)

`

package com.androidtitan.trooptracker.fragment;  import android.app.activity; import android.app.fragment; import android.os.bundle; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.imageview; import android.widget.listview; import android.widget.textview;  import com.androidtitan.alphaarmyapp.r; import com.androidtitan.trooptracker.adapter.championadapter; import com.androidtitan.trooptracker.data.databasehelper; import com.androidtitan.trooptracker.data.division; import com.androidtitan.trooptracker.data.soldier; import com.androidtitan.trooptracker.interface.championdatapullinterface; import com.androidtitan.trooptracker.interface.championinterface;  import java.util.arraylist; import java.util.list;  public class championlistfragment extends fragment {  databasehelper databasehelper; championinterface championinterface; championdatapullinterface pullinterface;  imageview deleter; imageview editer; imageview adder; textview proceedbtn; //this "slide" fragment  textview championheader; championadapter adapter; listview listview;  division focusdivision; soldier focussoldier; arraylist<soldier> soldieritems; list<soldier> troops;  int selection = -1; public int receivedindex = -1;  @override public void onattach(activity activity) {     super.onattach(activity);     try {         championinterface = (championinterface) activity;     } catch (classcastexception e) {         throw new classcastexception(activity.tostring()                 + " must implement onfragmentinteractionlistener");     }      try {         pullinterface = (championdatapullinterface) activity;     } catch(classcastexception e) {          throw new classcastexception(activity.tostring()                 + " must implement maindatapullinterface");     }      receivedindex = pullinterface.getdivisionindex(); }  public championlistfragment() {     // required empty public constructor }  @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      if(savedinstancestate != null) {     }      databasehelper = databasehelper.getinstance(getactivity());      soldieritems = new arraylist<soldier>();      troops = databasehelper.getallsoldiersbydivision(databasehelper.getalldivisions().get(receivedindex));     soldieritems.addall(troops);       runnable runnable = new runnable() {         @override         public void run() {             adapter.notifydatasetchanged();             listview.invalidateviews();         }     };  }  @override public view oncreateview(layoutinflater inflater, viewgroup container,                          bundle savedinstancestate) {     view v = inflater.inflate(r.layout.fragment_listview_champion, container, false);      deleter = (imageview) getactivity().findviewbyid(r.id.deletebtn);     editer = (imageview)  getactivity().findviewbyid(r.id.editbtn);     adder = (imageview) getactivity().findviewbyid(r.id.addbtn);      championheader = (textview) v.findviewbyid(r.id.championheader);     championheader.settext(databasehelper.getalldivisions().get(receivedindex).getname());      listview = (listview) v.findviewbyid(r.id.championlist);     adapter = new championadapter(getactivity(), getlistitems());     listview.setadapter(adapter);      listview.setonitemclicklistener(new adapterview.onitemclicklistener() {         @override         public void onitemclick(adapterview<?> parent, view view, int position, long id) {              if (!troops.get(position).isselected()) {                  troops.get(position).setisselected(true);                  if (selection != -1) {                     troops.get(selection).setisselected(false);                 }                  selection = position;                 championinterface.setlistviewselection(selection);              }             else {                  troops.get(position).setisselected(false);                  selection = -1;                 listview.invalidateviews();                  championinterface.setlistviewselection(-1);             }              (int = 0; <= listview.getlastvisibleposition() - listview.getfirstvisibleposition(); i++) {                  view item = listview.getchildat(i);                 item.setbackgroundcolor(0xffffffff);             }             view.setbackgroundcolor(0xcc448aff);              log.e("clfonitemclick", troops.get(position).getfname() + " " + troops.get(position).isselected());          }     });      deleter.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {              if(selection != -1) {                  focusdivision = databasehelper.getalldivisions().get(receivedindex);                 focussoldier = databasehelper.getallsoldiersbydivision(focusdivision).get(selection);                  for(soldier s : troops) {                     s.setisselected(false);                 }                  databasehelper.deletesoldier(focussoldier);                  adapter.removeitem(selection);                  selection = -1;                 log.e("clfdeleter", "selection: " + string.valueof(selection));                  championinterface.setlistviewselection(-1);              }          }     });      editer.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             log.e("cflediter", "selection: " + string.valueof(selection));              if(selection != -1) {                 //this populate our adder fragment                 focussoldier = soldieritems.get(selection);                  for(soldier s : troops) {                     s.setisselected(false);                 }                 championinterface.soldierpasser(selection, receivedindex,                         focussoldier.getfname(),                         focussoldier.getlname());             }         }     });      adder.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {              if(selection != -1) {                 focussoldier = soldieritems.get(selection);                 focussoldier.setisselected(false);             }              //when receive our divindex pass method             championinterface.soldierpasser(selection, receivedindex, null, null);         }     });      return v; }  @override public void ondetach() {     super.ondetach();     championinterface = null; }  private list<soldier> getlistitems() {     arraylist<soldier> soldieritems = new arraylist<soldier>();      if (receivedindex == -1) {         soldieritems.addall(databasehelper.getallsoldiers());      } else {         soldieritems.addall(databasehelper.getallsoldiersbydivision(databasehelper.getalldivisions().get(receivedindex)));     }     return soldieritems; }   } ` 

championactivity.java

` package com.androidtitan.trooptracker.activity;

import android.app.fragmenttransaction; import android.content.intent; import android.os.bundle; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.util.log;  import com.androidtitan.alphaarmyapp.r; import com.androidtitan.trooptracker.fragment.championlistfragment; import com.androidtitan.trooptracker.interface.championinterface; import com.androidtitan.trooptracker.interface.championdatapullinterface;  public class championactivity extends appcompatactivity implements championdatapullinterface, championinterface{  championlistfragment championfragment; //championdatapullinterface push4frag2pull;  int divisionindex; int selectionindex = - 1;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_champion);      //data section      intent intent = getintent();     divisionindex = intent.getintextra("landingdivision", -1);     log.e("champaoncreate", "divisionindex: " + divisionindex);     bundle args = new bundle();     args.putint("num", divisionindex);      //view section     toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar);     setsupportactionbar(toolbar);     getsupportactionbar().setdisplayshowtitleenabled(false);       championfragment = new championlistfragment();     championfragment.setarguments(args);       fragmenttransaction fragtran = getfragmentmanager().begintransaction();     fragtran.replace(r.id.championcontainer, championfragment, "championfragment").commit();  }   @override public void tabinteraction(int id) {  }  @override public void soldierpasser(int soldierint, int divisionint, string first, string last) {     log.e("cadeleter", "selection " + string.valueof(soldierint));       intent intent = new intent(this, adderactivity.class);     intent.putextra("editsoloindex", soldierint);     intent.putextra("editsolodivindex", divisionint);     intent.putextra("editsolofirst", first);     intent.putextra("editsololast", last);     startactivity(intent); }  //this going once have more fragments such maps , what's nearby @override public void drawerlistviewselection(int selection) {  }  @override public void adderfragdivreference(int divindex) {      intent intent = new intent(this, adderactivity.class);     intent.putextra("divindex", divindex);     championactivity.this.finish();     startactivity(intent);  }  @override public void setlistviewselection(int selection) {     selectionindex = selection; }  public int getlistviewselection() {     return selectionindex; }   @override public int getdivisionindex() {     return divisionindex; }    @override public void onbackpressed() {     intent intent = new intent(this, landingactivity.class);     this.finish();     startactivity(intent); } } ` 

championadapter.java

`

 package com.androidtitan.trooptracker.adapter;  import android.app.activity; import android.content.context; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.textview;  import com.androidtitan.alphaarmyapp.r; import com.androidtitan.trooptracker.activity.championactivity; import com.androidtitan.trooptracker.data.databasehelper; import com.androidtitan.trooptracker.data.soldier;  import java.util.list;  /**  * created amohnacs on 6/19/15.  */  /* todo:   need take implementation of highlighting our listview items in adapter form adderfragment todo:   , implement them in getview here. todo:   might have deal passing 'olddivision' , 'divselected' variables todo:   maybe create headers.  */ public class championadapter extends baseadapter { private activity context; databasehelper databasehelper;  private list<soldier> adapterdata; private layoutinflater layoutinflater;  private int selection = -1;  public championadapter(activity acontext, list<soldier> soldiers) {     this.context = acontext;     this.adapterdata = soldiers;     layoutinflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service);      databasehelper = databasehelper.getinstance(context);  }  @override public int getcount() {     return adapterdata.size(); }  @override public object getitem(int position) {     return adapterdata.get(position); }  @override public long getitemid(int position) {     return adapterdata.get(position).getid(); }  @override public view getview(int position, view convertview, viewgroup parent) {     listviewholder viewholder;      selection = ((championactivity) context).getlistviewselection();      if(convertview == null) {         //inflate listview_item_row.xml         layoutinflater li = (layoutinflater) context                 .getsystemservice(context.layout_inflater_service);     convertview = li.inflate(r.layout.listview_champion_item, null);         viewholder = new listviewholder();         convertview.settag(viewholder);     viewholder.firstitem = (textview) convertview.findviewbyid(r.id.champ_text);     }     else {         viewholder = (listviewholder) convertview.gettag();     }      //listviewselection     if (position == selection) {         convertview.setbackgroundcolor(0xcc448aff);     }     else {         convertview.setbackgroundcolor(0xffffffff);     }      viewholder.firstitem.settext(adapterdata.get(position).getfname() + " "             + adapterdata.get(position).getlname());      log.e("clfonitemclick", adapterdata.get(position).getfname() + " " + adapterdata.get(position).isselected());      return convertview; }  class listviewholder {     public textview firstitem; }  public void removeitem(int itemposition) {     //remove according group. dont forget remove children aswell!      adapterdata.remove(itemposition);     notifydatasetchanged();     notifydatasetinvalidated();  }  }` 

championinterface.java

` public interface championinterface {     public void tabinteraction(int id);     public void soldierpasser(int soldierint, int divisionint, string first, string last);     public void drawerlistviewselection(int selection);     public void adderfragdivreference(int divindex);     public void setlistviewselection(int selection); } ` 

try call

soldier todelete = adapter.getitem(selection); databasehelper.deletesoldier(todelete);   if(//deletion successful){    adpater.removeitem(selection); } 

this way not reloading objects db not using!


Comments

Popular posts from this blog

How has firefox/gecko HTML+CSS rendering changed in version 38? -

javascript - Complex json ng-repeat -

jquery - Cloning of rows and columns from the old table into the new with colSpan and rowSpan -