Android - удалить строку из списка при нажатии кнопки

Я создаю приложение, в котором данные получаются от сканера штрих-кода, который идентифицирует идентификатор и показывает детали из базы данных через веб-службу. В настоящее время я использую настраиваемый список с текстовым представлением и кнопкой, данные, которые я хочу встроить в текстовое представление, отображаются правильно...

мой вопрос: как удалить определенную строку из списка при нажатии кнопки.

вот код пользовательского адаптера.

 public class MyCustomAdapter extends ArrayAdapter<String> 
     {
         public MyCustomAdapter(Context context, int textViewResourceId, ArrayList<String> items) 
         {
             super(context, textViewResourceId, items);
         }

         @Override
         public View getView(int position, View convertView, ViewGroup parent)
         {

             LayoutInflater inflater = FusionMain.this.getLayoutInflater();
             View row = inflater.inflate(R.layout.list_row, parent, false);


             return row;
         }
     } // end MyCustomAdapter

какую еще функцию я должен создать в пользовательском адаптере? Я новичок в разработке Android. Если вам нужна дополнительная информация, я могу обновить вопрос или код. любезно ответьте


person Ozi    schedule 09.09.2013    source источник
comment
stackoverflow.com/a/13412658/1434631   -  person Nermeen    schedule 09.09.2013


Ответы (4)


Чтобы обновить свой адаптер, просто удалите элемент вашего ArrayList и вызовите

уведомитьDataSetChanged()

в вашем адаптере.

Я думаю, вам стоит посмотреть этот пример:

http://www.vogella.com/articles/AndroidListView/article.html

person Davidjburgos    schedule 09.09.2013

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

Метод getView с параметром position будет выполняться для каждого элемента, отображаемого в данный момент в списке. Когда вы прокрутите список, вы получите больше вызовов getView(). Из метода getView вы должны вернуть представление, которое будет отображаться в списке, но оно уже должно быть заполнено ДАННЫМИ! Например:

@Override
     public View getView(int position, View convertView, ViewGroup parent)
     {

         LayoutInflater inflater = FusionMain.this.getLayoutInflater();
         View row = inflater.inflate(R.layout.list_row, parent, false);
         TextView myTextView = (TextView)row.findViewById(R.id.myTextviewId);
         myTextView.setText(items.get(position));

         return row;
     }

Если вы хотите, чтобы список был изменен, вам нужно изменить объект элементов (например, удалить один элемент из этого списка ArrayList), а затем вы должны использовать метод myAdapter.notifyDatasetChanged(). Это заставит ваш AdapterView (например, ListView) обновиться еще раз и еще раз вызвать метод getView для всех видимых позиций.

person Mark    schedule 09.09.2013

Просто необходимо удалить элемент из списка и вызвать функцию notifyDataSetChanged

 ImageButton dltbutton = (ImageButton) row.findViewById(R.id.removebtn);
        dltbutton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                myModel.remove(position);
                notifyDataSetChanged();
            }
        });

Проверьте мой ответ ниже: -

https://stackoverflow.com/a/39243875/1733810

person Neeraj Singh    schedule 31.08.2016

Самый простой способ — воссоздать адаптер.

public void onClick(View view){

   mItemsList.remove(numberToDelete);
   mListView.setAdapter(new MyCustomAdapter(this, mResId,mItemsList));
}
person akelix    schedule 09.09.2013
comment
Не рекомендуется каждый раз заново создавать адаптер. Это будет работать, но не оптимально. Метод notifyDatasetChanged() используется для обновления представлений при изменении данных. - person Mark; 09.09.2013