2013-04-17 6 views
5

Ich habe ein benutzerdefiniertes Listenansichtselement, das eine Schaltfläche zum Entfernen enthält. Ich habe einen benutzerdefinierten Adapter namens LazyListAdapter erstellt, der BaseAdapter erweitert. Im Inneren des getView Methode, die ich überschreiben ich diese Schaltfläche Onclick Methode wie folgt festgelegt:Entfernen eines Elements aus ListView in einem benutzerdefinierten Adapter

@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 
    } 
} 

Wie ich löschen oder ausblenden irgendwie die entsprechende Ansicht durch einen Code innerhalb dieser Onclick Methode? Oder sollte ich meinen Ansatz ändern?

Vielen Dank im Voraus.

+2

Aufruf 'notifyDataSetChanged()' in 'onClick()'; –

+0

Wie viele Artikel sind in Ihrer Liste? Sie könnten in Betracht ziehen, Ansichten wiederzuverwenden –

+0

Im Durchschnitt werde ich nicht mehr als 20-30 Ansichten haben, obwohl es von einem Benutzer zu einem anderen wechseln wird. Ich weiß nicht, wie ich die Ansichten wiederverwenden kann. – ecem

Antwort

7

Versuchen Sie, diese

@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 unterstützt: Bitte erläutern Sie, was Sie hier bearbeiten möchten. Dies ist eine gute Übung, wenn Sie eine Bearbeitung machen, hinterlassen Sie bitte eine Notiz dort drüben. – Ankit

+0

Ich habe nur den Abstand geändert, damit der Code für zukünftige Besucher besser lesbar ist. Nichts mehr. – ecem

+0

Ist das normal? Ich meine, ich möchte auch die typische Bestätigungsmeldung zeigen (bist du sicher, ja/nein). Soll ich diesen Code in den Adapter stecken? Vielen Dank. @Ankit – Ricardo

0

versuchen Sie es mit parent.removeViewAt (Position).

+0

Dies ist der Fehler, den ich bekomme, wenn Sie Ihre Antwort verwenden, 'java.lang.UnsupportedOperationException: removeViewAt (int) wird nicht in AdapterView' – ArtiomLK

0

einfach können Sie ein Element innerhalb GetView Methode wie im Beispiel

entfernen
@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; 
}