Удаление пользовательского элемента при нажатии кнопки в нем

#android #android-listview #listitem

#Android #android-listview #список

Вопрос:

У меня есть ListView настраиваемые элементы списка, имеющие следующий макет:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="horizontal"
      android:layout_width="match_parent" 
      android:layout_height="wrap_content">

          <TextView android:id="@ id/itemNumberText" 
               android:text="1." android:textSize="16sp"
               android:textStyle="bold" 
               android:layout_height="match_parent"
               android:layout_width="33dp" 
               android:gravity="center_vertical|center_horizontal"/>

        <ImageView android:src="@drawable/item"
               android:id="@ id/imageView1" 
               android:layout_height="match_parent"
               android:layout_width="47dp"/>

        <LinearLayout android:id="@ id/linearLayout1"
               android:orientation="vertical"
               android:layout_height="wrap_content"
               android:layout_width="143dp">

              <TextView android:text="name" 
                        android:id="@ id/text1" 
                        android:layout_width="wrap_content" 
                        android:layout_height="wrap_content" 
                        android:textSize="16sp" android:textStyle="bold"  
                        android:textColor="#f5cd10"></TextView>

             <LinearLayout android:id="@ id/linearLayout2" 
                    android:layout_height="wrap_content"
                    android:layout_width="match_parent">

                    <TextView android:id="@ id/text2"
                              android:layout_height="wrap_content" 
                              android:text="amount" 
                              android:textColor="#ffffff"
                              android:layout_width="wrap_content"/>

                    <TextView android:text=" unit" 
                              android:id="@ id/text4"
                              android:layout_width="wrap_content"
                              android:layout_height="wrap_content"/>
            </LinearLayout>

            <TextView android:text="price"
                      android:id="@ id/text3"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"/>

        </LinearLayout>
        <RelativeLayout android:layout_height="match_parent" 
                        android:id="@ id/relativeLayout1"
                        android:layout_width="match_parent">

            <Button android:layout_width="wrap_content" 
                    android:layout_height="wrap_content"  
                    android:onClick="itemDeleteButtonClicked" 
                    android:background="@drawable/item_button_style_selector" 
                    android:text="Delete Item" android:id="@ id/list_button" 
                    android:layout_alignParentRight="true" 
                    android:layout_alignParentBottom="true"/>

       </RelativeLayout>

</LinearLayout>
  

Как видно из приведенного выше, я упомянул метод для кнопки, набрав

 android:onClick="itemDeleteButtonClicked" 
  

Вот код для метода:

  public void itemDeleteButtonClicked(View v)
 {
    int index;
    index=itemsListView.getSelectedItemPosition();//itemsListView is the listview
    list.remove(index);//list is the list of data to be shown in listview
    adapter.notifyDataSetChanged();
 }
  

Я использовал a SimpleAdapter , и он не настроен. Вот оно:

 //create base adapter for listview 
adapter= new SimpleAdapter( 
             this, list, R.layout.detailed_info_list_item, 
               new String[] {"number","item","amount","price","unit"}, 
               new int[] {R.id.itemNumberText,R.id.text1,R.id.text2, R.id.text3,R.id.text4} 
             ); 
setListAdapter(adapter);
  

Но это не работает. То есть это не удаление выбранного элемента. Не могли бы вы дать мне несколько предложений.

Ответ №1:

Метод getSelectedItemPosition() возвращает правильное значение только в том случае, если элемент списка действительно выбран. Если вы нажмете кнопку внутри элемента списка, элемент списка, вероятно, не будет выбран в соответствии с представлением списка. Проверьте значение переменной index после вызова getSelectedItemPosition() . Если значение равно -1, элемент списка не выбран, и вам нужно самостоятельно выбрать нужный элемент списка.

Комментарии:

1. Спасибо за ответ. Не могли бы вы предложить способ получить фактическую позицию выбранного элемента?

2. Вы должны передать ссылку на элемент списка или идентификатор в OnButtonClickedListener. Затем вы можете удалить правильный элемент списка в прослушивателе.

Ответ №2:

Установите OnItemClickListener в своем listview для сохранения позиции элемента в поле, после чего вы узнаете, какой элемент был выбран.

Вы можете попробовать вызвать setSelection, чтобы заставить getSelectedItemPosition работать, но настройка поля проще