简体   繁体   中英

Android - Delete item within ListActivity

I have a Delete button next to each list item in my ListActivity class, and in my delete button i have android:onClick="myClickHandler" . Right now, i am working on my code within my myClickHandler function to successfully delete the selected list item. Could someone please give me advice in how i can reference in my code as to which item is being deleted, as well as delete the item upon being clicked? I've provided my ListActivity code.. Thanks for all and any responses!

public class LyricList extends ListActivity {

private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;
private static final int INSERT_ID = Menu.FIRST;
private static final int DELETE_ID = Menu.FIRST + 1;
private LyricsDbAdapter mDbHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lyriclist);
    mDbHelper = new LyricsDbAdapter(this);
    mDbHelper.open();
    fillData();
    registerForContextMenu(getListView());
}

private void fillData() {
    Cursor lyricsCursor = mDbHelper.fetchAllLyrics();
    startManagingCursor(lyricsCursor);
    String[] from = new String[]{LyricsDbAdapter.KEY_TITLE};
    int[] to = new int[]{R.id.text1};
    SimpleCursorAdapter lyrics = 
        new SimpleCursorAdapter(this, R.layout.lyrics_row, lyricsCursor, from, to);
    setListAdapter(lyrics);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(0, INSERT_ID, 0, R.string.menu_insert);
    return true;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch(item.getItemId()) {
        case INSERT_ID:
            createLyric();
            return true;
    }

    return super.onMenuItemSelected(featureId, item);
}

public void myClickHandler(View v) 
{
    ListView lvItems = getListView();
    for (int i=0; i < lvItems.getChildCount(); i++) 
    {
        //incorrectly implemented...getting errors within this
        LinearLayout vwParentRow = (LinearLayout)v.getParent();
        Button Delbtn = (Button)vwParentRow.getChildAt(1);
        DELETE_ID:
        mDbHelper.deleteLyric(lvItems.getChildAt(i)); 

    }

}

private void createLyric() {
    Intent i = new Intent(this, NextActivity.class);
    startActivityForResult(i, ACTIVITY_CREATE);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Intent i = new Intent(this, NextActivity.class);
    i.putExtra(LyricsDbAdapter.KEY_ROWID, id);
    startActivityForResult(i, ACTIVITY_EDIT);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    fillData();
}
}

You need to

  1. Delete it from the DB.
  2. Call requery() on the Cursor.
  3. Call notifyDataSetChanged on the adapter.

Edit: In order to get the ID you should override the bindView function of the adapter, and attach your OnClickListener in there.

How to remove a selected item from ListView using CursorAdapter

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM