I am trying to add a delete button that should remove an item in the database depending on the position it has in RecyclerView . I struggle with that. Here is my layout file for RecyclerView :
<TextView android:id="@+id/layout_list_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:textStyle="bold" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/layout_list_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignStart="@+id/layout_list_name" android:layout_alignLeft="@+id/layout_list_name" android:layout_below="@+id/layout_list_name" /> <ImageButton android:id="@+id/layout_list_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:contentDescription="Delete" android:src="@drawable/icon_layout_delete_layout_item" />
Here I declare onItemClick for ImageButton , which is the delete button:
imageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getBaseContext(), "Delete hit!", Toast.LENGTH_SHORT).show(); } });
This is my RecyclerView class for listeners:
private OnItemClickListener onItemClickListener; public interface OnItemClickListener { void onItemClick(View view, int position); } GestureDetector gestureDetector; public ListsDatabaseItemListener(Context context, OnItemClickListener listener) { onItemClickListener = listener; gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent motionEvent) { return true; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) { View view = recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY()); if (view != null && onItemClickListener != null && gestureDetector.onTouchEvent(motionEvent)) { onItemClickListener.onItemClick(view, recyclerView.getChildLayoutPosition(view)); return true; } return false; } @Override public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { }
And finally, here is my adapter class:
List<ListsDatabaseList> list; public ListsDatabaseListAdapter(List<ListsDatabaseList> list) { this.list = list; } @Override public ListsDatabaseListHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_list, parent, false); ListsDatabaseListHolder holder = new ListsDatabaseListHolder(view); return holder; } @Override public void onBindViewHolder(ListsDatabaseListHolder holder, int position) { holder.name.setText(list.get(position).getName()); holder.date.setText(list.get(position).getDate()); } @Override public int getItemCount() { return list.size(); } public static class ListsDatabaseListHolder extends RecyclerView.ViewHolder { TextView name; TextView date; ImageButton delete; public ListsDatabaseListHolder(View view) { super(view); this.name = (TextView) view.findViewById(R.id.layout_list_name); this.date = (TextView) view.findViewById(R.id.layout_list_date); this.delete = (ImageButton) view.findViewById(R.id.layout_list_delete); } }
Any suggestions on how to achieve this?
source share