2016-02-20 12 views
5

में एक हटाएं बटन जोड़ें मैं RecyclerView में स्थित स्थिति के आधार पर डेटाबेस में किसी आइटम को हटाने के लिए एक डिलीट बटन जोड़ने की कोशिश कर रहा हूं। मैं इसके साथ संघर्ष कर रहा हूं।एक 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" /> 

यह वह जगह है जहाँ मैं ImageButton जो हटाएँ बटन है के लिए onItemClick घोषित:

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) { 

} 
:

imageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(getBaseContext(), "Delete hit!", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

यह मेरा RecyclerView श्रोता वर्ग है यहाँ RecyclerView के लिए मेरे लेआउट फ़ाइल है

और आखिरकार, यहां मेरा एडाप्टर वर्ग है:

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); 
    } 
} 

इसे प्राप्त करने के तरीके पर कोई सुझाव?

+2

ऐसा नहीं है कि आप यह कोड प्रदान की महान है और सभी, लेकिन आपका प्रश्न क्या है? गतिविधि में हटाए गए श्रोता जोड़ने के बजाय –

+1

, आप इसे रीसाइक्लर एडाप्टर में ऑनबिंडव्यूहोल्डर के अंदर कर सकते हैं। –

+0

मैंने अपने प्रश्न को बहुत ऊपर से पूछा लेकिन स्पष्ट रूप से मुझे खुद को स्पष्ट नहीं किया। – Razor

उत्तर

4

आप अपने onBindViewHolder() विधि में ImageButton क्लिक श्रोता जोड़ सकते हैं:

@Override 
public void onBindViewHolder(ListsDatabaseListHolder holder, final int position) { 

    holder.name.setText(list.get(position).getName()); 
    holder.date.setText(list.get(position).getDate()); 

    holder.delete.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       ListsDatabaseList theRemovedItem = list.get(position); 
       // remove your item from data base 
       list.remove(position); // remove the item from list 
       notifyItemRemoved(position); // notify the adapter about the removed item 
      } 
    }); 
} 
+0

अपने रीसाइक्लिंग व्यू के इन्टरसेप्ट टचवेन्ट पर टिप्पणी करने का प्रयास करें, मुझे लगता है कि यह घटना का उपभोग करता है। – Rami

+0

मैंने कोशिश की। यह केवल मेरे ऐप को क्रैश करने का कारण बनता है। क्या कोई और तरीका है? – Razor

+0

ऐप क्रैश होने पर आपको क्या त्रुटि/अपवाद मिलता है? – Rami