2013-04-17 8 views
5

के अंदर ListView से किसी आइटम को निकालना मेरे पास एक कस्टम सूचीदृश्य आइटम है जिसमें 'निकालें' बटन शामिल है। मैंने LazyListAdapter नामक एक कस्टम एडाप्टर बनाया जो BaseAdapter बढ़ाता है।कस्टम एडाप्टर

@Override 
public View getView(final int pos, View convertView, ViewGroup parent) { 

    View v = convertView; 

    // Some other things... 

    ImageButton removeFav = (ImageButton) v.findViewById(R.id.removeFavorites); 

    removeFav.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

      // I delete the object from Parse database here, 
      // Therefore I want the view to disappear here 
    } 
} 

को कैसे नष्ट या किसी भी तरह कर सकते हैं इस onclick विधि के अंदर एक कोड का उपयोग करके इसी दृश्य को छिपाने: getView विधि है कि मैं ओवरराइड मैं इस बटन के onclick विधि सेट के रूप में इस के अंदर? या मुझे अपना दृष्टिकोण बदलना चाहिए?

अग्रिम में आपका बहुत बहुत धन्यवाद।

+2

कॉल' notifyDataSetChanged() 'उदाहरण)' में के रूप में getview विधि के अंदर एक आइटम निकाल सकते हैं; –

+0

आपकी सूची में कितने आइटम हैं? आप विचारों को पुन: उपयोग करने पर विचार करना चाहेंगे –

+0

औसतन, मेरे पास 20-30 से अधिक विचार नहीं होंगे, हालांकि यह एक उपयोगकर्ता से दूसरे उपयोगकर्ता में बदल जाएगा। मुझे नहीं पता कि विचारों का पुन: उपयोग कैसे करें। – ecem

उत्तर

7

इस

@Override 
public View getView(final int pos, View convertView, ViewGroup parent) { 

    View v = convertView; 

    // Some other things... 

    ImageButton removeFav = (ImageButton) v.findViewById(R.id.removeFavorites); 

    removeFav.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     // After you delete the object from Parse database here, 
     notifyDataSetChanged(); 

    } 
} 
+0

@ecem में समर्थित नहीं है: कृपया स्पष्ट करें कि आप यहां क्या संपादन करना चाहते हैं। जब भी आप कोई संपादन करते हैं तो यह एक अच्छा अभ्यास है, कृपया वहां एक नोट छोड़ दें। – Ankit

+0

मैंने केवल अंतर को बदल दिया ताकि कोड भविष्य के आगंतुकों के लिए अधिक पठनीय हो। और कुछ नहीं। – ecem

+0

क्या यह सामान्य है? मेरा मतलब है, मैं ठेठ पुष्टिकरण संदेश भी दिखाना चाहता हूं (क्या आप निश्चित हैं, हां/नहीं)। क्या मुझे उस कोड को एडाप्टर के अंदर रखना चाहिए? धन्यवाद। @Ankit – Ricardo

0

parent.removeViewAt (स्थिति) का उपयोग करने का प्रयास करें।

+0

यह त्रुटि है जो मुझे आपके उत्तर का उपयोग करते समय मिलती है, 'java.lang.UnsupportedOperationException: removeViewAt (int) एडाप्टर व्यू – ArtiomLK

0

प्रयास करें, बस आप (`onClick में

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 

    if (convertView == null) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.list_row, null, false); 
     viewHolder = new ViewHolder(); 
     viewHolder.img = (ImageView) convertView.findViewById(R.id.img); 
     convertView.setTag(viewHolder); 

    } else { 
     // we call the view created before to not create a view in each time 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    final int imgId = imageId.get(position); 

    viewHolder.img.setImageResource(imgId); 

    viewHolder.img.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(context, "Clicked " + imgId, Toast.LENGTH_SHORT) 
        .show(); 
     } 
    }); 

    // Create a generic swipe-to-dismiss touch listener. 
    viewHolder.img.setOnTouchListener(new SwipeDismissTouchListener(
      viewHolder.img, null, 
      new SwipeDismissTouchListener.DismissCallbacks() { 
       @Override 
       public boolean canDismiss(Object token) { 
        return true; 
       } 

       @Override 
       public void onDismiss(View view, Object token) { 

        Log.d(TAG, "Image ıd" + imgId); 


        imageId.remove(position); 
        remove(position); 

        notifyDataSetChanged(); 
       } 
      })); 

    return convertView; 
} 
संबंधित मुद्दे