Я внедрил пользовательский адаптер и listItemView. Адаптер устанавливает onlclick прослушиватель на кнопку, которая находится в listItemView. Слушатель onclick просто вызывает частный метод, который у меня есть в адаптере, и передает ему позицию элемента, который нужно удалить. Я знаю, что позиция правильная, потому что база данных удаляет соответствующий элемент. Я нашел похожие вопросы, но не смог адаптировать ответы для работы для меня. Идеи и мысли очень ценятся. Благодарю.вызов удалить из пользовательского адаптера всегда удаляет последний элемент
Вот полный адаптер класса
public class FoodListAdapter extends ArrayAdapter<FoodListItem> {
//private
private int type;
public FoodListAdapter(Context context, ArrayList<FoodListItem> _objects) {
super(context, 0, _objects);
type = 0;
}
public FoodListAdapter(Context context, ArrayList<FoodListItem> _objects, int _type) {
super(context, 0, _objects);
type = _type;
}
@Override
public View getView(int position, View reusableView, ViewGroup parent)
{
//Cast the reusable view to a listAdpaterItemView
FoodListItemView listItemView = (FoodListItemView) reusableView;
//Check if the listAdapterItem is null
if(listItemView == null)
{
//If it is null, then create a view.
listItemView = FoodListItemView.inflate(parent, this, type);
}
if (type == 2)
{
Button deleteButton = (Button) listItemView.findViewById(R.id.listItemViewDeleteBTN);
deleteButton.setTag(new Integer(position));
}
//Now we need to set the view to display the data.
listItemView.setData(getItem(position));
return listItemView;
}
}
Вот часть моего кода используется в фрагменте. Обратите внимание, что у меня есть приватная переменная, объявленная в классе для listAdapter, хотя я не думаю, что мне это нужно.
private void displayListForDate(Calendar _date)
{
//get the list view
ListView listView = (ListView) getView().findViewById(1);
//Clear the listview by removing the listadapter and setting it to null.
//listView.setAdapter(null);
//First we must get the items.
Global global = (Global) getActivity().getApplicationContext();
DietSQLiteHelper database = global.getDatabase();
//Create a list to hold the items we ate. This list will then be added to the listView.
final ArrayList<FoodListItem> consumedList;
//Add the items to the array.
consumedList = database.getConsumed(_date.getTimeInMillis());
//Create an adapter to be used by the listView
listAdapter = new FoodListAdapter(getActivity().getBaseContext(), consumedList, 2);
//Add the adapter to the listView.
listView.setAdapter(listAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
consumedList.remove(position);
listAdapter.notifyDataSetChanged();
}
});
}
Где вы снимаете данные с адаптера? – Rohit5k2
В deleteItem() Я вызываю remove (item), этот метод находится в классе адаптера. – n01d3a
Вы можете отправить код 'remove (item)' method? – Rohit5k2