Search code examples
androidsqlitecustom-adapter

Where to put notifydatasetchanged() in my project


Good day

i am having problem when I am trying to delete my item from my sqlite.
it doesn't update my listview.

MAIN ACTIVITY
this is my main activity, both onCreate and onResume

 private CustomAdapter customAdapter;

 @Override
protected voidonCreate(Bundle savedInstanceState) {
      lv = (ListView)findViewById(R.id.memo_list_view);
      customAdapter = new CustomAdapter(this, memoIDS, memoTitles, memoCreatedDates, memoAlarmedDates);
 }

 @Override
protected voidonResume() {
 memoIDS.clear();
    memoTitles.clear();
    memoCreatedDates.clear();
    memoAlarmedDates.clear();

    Cursor c=SplashActivity.db.rawQuery("SELECT * FROM memos", null);
    if(c.getCount()!=0) {
        while(c.moveToNext()) {
            memoIDS.add(c.getString(0));
            memoTitles.add(c.getString(1));
            memoCreatedDates.add(c.getString(3));
            memoAlarmedDates.add(c.getString(4));
        }
        c.close();
        lv.setAdapter(customAdapter);
    }
 }

CustomAdapter
from this customadater, i am trying to delete the record i created.

  public class CustomAdapter extends BaseAdapter{   
List<String> mMemoIds;
List<String> mMemoTitle;
List<String> mMemoCreatedDate;
List<String> mMemoAlarmedDate;
Context context;

  private static LayoutInflater inflater=null;
public CustomAdapter(MemoListActivity mainActivity, List<String> memoIds, List<String> memoTitle, List<String> memoCreatedDate, List<String> memoAlarmedDate) {

    mMemoIds = memoIds;
    mMemoTitle = memoTitle;
    mMemoCreatedDate = memoCreatedDate;
    mMemoAlarmedDate = memoAlarmedDate;
    context = mainActivity;

    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return mMemoIds.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public class Holder
{
    TextView tViewMemoTitle;
    TextView tViewMemoCreatedDate;
    TextView tViewMemoAlarmedDate;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    Holder holder=new Holder();
    View rowView;       
     rowView = inflater.inflate(R.layout.program_list, null);

     holder.tViewMemoTitle=(TextView) rowView.findViewById(R.id.memo_list_title);      
     holder.tViewMemoCreatedDate=(TextView) rowView.findViewById(R.id.memo_list_created_date);
     holder.tViewMemoAlarmedDate=(TextView) rowView.findViewById(R.id.memo_list_alarmed_date);

     holder.tViewMemoTitle.setText(mMemoTitle.get(position));     
     holder.tViewMemoCreatedDate.setText("Created Date : " + mMemoCreatedDate.get(position));
     holder.tViewMemoAlarmedDate.setText("Alarm Date : " + mMemoAlarmedDate.get(position));

     rowView.setOnClickListener(new OnClickListener() {            
        @Override
        public void onClick(View v) {
            Cursor c=SplashActivity.db.rawQuery("SELECT * FROM memos WHERE id='"+mMemoIds.get(position)+"'", null);
            if(c.moveToFirst())
            {
                SplashActivity.db.execSQL("DELETE FROM memos WHERE id='"+mMemoIds.get(position)+"'");
                notifyDataSetChanged();
            }


        }
    }); 

    return rowView;
}

}

my problem is, i don't know where to put

  notifydatasetchanged();

Solution

  • rowView.setOnClickListener(new OnClickListener() {     
    
            @Override
            public void onClick(View v) {           
                Cursor c=SplashActivity.db.rawQuery("SELECT * FROM memos WHERE id='"+mMemoIds.get(position)+"'", null);
                if(c.moveToFirst())
                {
                    SplashActivity.db.execSQL("DELETE FROM memos WHERE id='"+mMemoIds.get(position)+"'");
                    mMemoIds.remove(c.getString(0));
                    mMemoTitle.remove(c.getString(1));
                    mMemoCreatedDate.remove(c.getString(3));
                    mMemoAlarmedDate.remove(c.getString(4));
                    notifyDataSetChanged(); // Insert your notifydatasetchanged here
                }
    
            }
        });