Как удалить элемент в моем списке, используя кнопку удаления для конкретного элемента? - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть 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);
        }

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я не понимаю, почему вы помещаете свой cursor внутрь mylist, когда вы хотите использовать SimpleCursorAdapter, вы можете просто получить экземпляр cursor, вызвав метод getCursor().

Чтобы ответить на ваш вопрос, выполните следующие действия:

Создать метод удаления в вашем UserDb классе

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 для улучшения производительности и обработки памяти.
  • ORM (Object-Relational Mapping) библиотека типа Room или даже Firebase, чтобы сделать вашу жизнь проще.
0 голосов
/ 03 апреля 2019

Вы пытались сделать что-то вроде этого:

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

Это должно работать! Если не скажи мне!

больше здесь: Как удалить элемент из списка с помощью кнопки?

никогда не сдавайся

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...