#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 работать, но настройка поля проще