Удаление элемента из списка долгим щелчком в ошибке Android - PullRequest
0 голосов
/ 25 октября 2018

Я хочу добавить элементы, которые будут отображаться как ListView , и я также хочу, чтобы при длительном нажатии на конкретный элемент он должен был быть удален.

Для добавляемой части этоработает хорошо, но для удаления части это не работает.

Я думаю, что я должен добавить ArrayList, но я не знаю, как я могу связать его с адаптером, поэтому элементы, которые яВвод ArrayList должен быть введен.

package com.example.asus.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         final ArrayList<String> arrayList = new ArrayList<String>();
        final ListView myList = (ListView)findViewById(R.id.listToDo);

        final ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);
        myList.setAdapter(listAdapter);
        Button addButton = (Button) findViewById(R.id.button);
        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                EditText myItem = (EditText)findViewById(R.id.editText);
                String value = myItem.getText().toString();
                listAdapter.add(value);
                myItem.getText().clear();


            }
        });
        myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(),((TextView)view).getText().toString(),Toast.LENGTH_LONG).show();
            }
        });
        myList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                //Adapter adapter = new Adapter(this, listAdapter);


                listAdapter.remove(String.valueOf(position));
                listAdapter.notifyDataSetChanged();
                Toast.makeText(MainActivity.this, "Item deleted", Toast.LENGTH_LONG).show();
                return false;
            }
        });

    }
}

В части добавления все работало без ошибок.Обновление:

Я добавил

listAdapter.remove(String.valueOf(position));

вместо

listAdapter.remove(position);

Нет никаких ошибок, но когда я долго нажимаю на элемент, появляется сообщение «Элемент удален"как в тосте, но элемент все еще существует в списке, как я могу это исправить?

1 Ответ

0 голосов
/ 25 октября 2018

Поскольку listAdapter является экземпляром ArrayAdapter .У него нет API, которые позволят вам удалить элемент на основе заданной позиции.Чтобы удалить элемент, вы должны удалить (T) API.

Кстати, при инициализации listAdapter вы должны передать arrayList в конструктор.

final ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);

Для удаления выбранного элемента

arrayList.remove(position);
listAdapter.notifyDataSetChanged();

или

listAdapter.remove(arrayList.get(position));
listAdapter.notifyDataSetChanged();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...