如何使用特定项目删除按钮删除列表视图中的项目?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用特定项目删除按钮删除列表视图中的项目?相关的知识,希望对你有一定的参考价值。

我有一个listView,每个项目都有一个删除按钮。我希望能够在单击项目按钮时删除该项目。

我尝试过使用.remove(position)和[position] = null但它不起作用。我不确定它是否因为我使用了数据库和cursorAdapter,或者因为我是android Studio的新手,我只是不知道.remove之前应该去哪个实际变量。因为我知道我的代码很乱,但它到目前为止工作。

private void populatelistView() {
            final Cursor res = userDb.getAllRows();
            final String[] fromFeildnames = new String[]{ DatabaseUser.KEY_1, DatabaseUser.KEY_2};
            final int[] toViewIds = new int[]{R.id.textViewNum, R.id.textViewItem};
            final SimpleCursorAdapter myCursorAdaptor;
            myCursorAdaptor = new SimpleCursorAdapter(getBaseContext(), R.layout.item_layout, res, fromFeildnames, toViewIds, 0){
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    LayoutInflater inflater = getLayoutInflater();
                    View rowView = inflater.inflate(R.layout.item_layout, null, true);
                    delete= (Button)rowView.findViewById(R.id.deleteItem);
                    delete.setTag(position);


                    Cursor cursor = (Cursor) mylist.getItemAtPosition(position);
                    String listName = cursor.getString(1);
                    String displayName = db.getName(listName);

                    TextView textView = (TextView) rowView.findViewById(R.id.textViewItem);
                    textView.setText(displayName);
View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            View parentRow = (View) v.getParent();
                            ListView listView = (ListView) parentRow.getParent();
                            final int position = listView.getPositionForView(parentRow);
                            Cursor cursor = (Cursor) mylist.getItemAtPosition(position);
                            Toast.makeText(getApplicationContext(), "Button " + position, Toast.LENGTH_SHORT).show();
                        }
                    });
                    return rowView;
                }
            };
            mylist.setAdapter(myCursorAdaptor);
        }
答案

你尝试过这样的事情:

myList.remove([INDEX]);
myList.notifyDataSetChanged(); or adapter.notifyDataSetChanged();

它应该工作!如果不告诉我!

更多这里:How to delete item from listview using button?

永不放弃

另一答案

我不明白为什么你把cursor放在mylist里面当使用SimpleCursorAdapter的目的时,你可以通过调用cursor方法得到getCursor()实例。

要回答您的问题,请按以下步骤操作:

UserDb类中创建delete方法

class UserDb {

    void delete(String userId) {
        mSqLiteDatabase.delete(USER_TABLE,
                "id = ?",
                new String[]{userId});
    }
}

onClickListener设置为您的删除按钮

delete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int deletePosition = (int) v.getTag();
        cursor.moveToPosition(deletePosition);
        String userId = cursor.getString(1); // I assume this is the user id
        userDb.delete(userId);

        // get the cursor that contains the newest data
        Cursor newestDataCursor = userDb.getAllRows();

        // change your adapter cursor
        myCursorAdaptor.changeCursor(newestDataCursor);

        // tell your adapter that the data has been changed, so it needs to update it's views
        myCursorAdaptor.notifyDataSetChanged();
    }
});

只是为了您的考虑,您可以使用

  • RecyclerView以获得更好的性能和内存处理。
  • qazxsw poi(对象关系映射)库,如qazxsw poi甚至是qazxsw poi,让您的生活更轻松。

以上是关于如何使用特定项目删除按钮删除列表视图中的项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中删除列表视图顶部的项目?

如何知道单击按钮的列表项的索引

单击 CursorAdapter 中的按钮时如何在列表视图项目行中执行更新和删除操作

如何删除android中的自定义列表视图项?

如何使用里面的按钮从列表视图中删除一个项目?

如何从android的listview中删除一个项目