2012-07-21 6 views
5

verwenden Ich habe eine benutzerdefinierte ListView, die eine Button enthält. Die Funktion dieser Schaltfläche ist Löschen. Wenn ein Benutzer auf diese Schaltfläche klickt, wird die aktuelle Zeile gelöscht.wie onClickListener-Methode der Schaltfläche in einer ListView

  • Wie kann ich es tun?
  • Wie kann ich onClickListener für diese Schaltfläche festlegen?
  • Wie kann ich die Zeile Id fangen, auf der diese Schaltfläche ist?

Vielen Dank im Voraus.

+0

'setOnItemClickListener()' auf Listenansicht, wenn u nur Zeilen-ID benötigen – MAC

+0

[Siehe das Beispiel] (http://samir-mangroliya.blogspot.in/p/android-customized-listview.html) –

Antwort

7

In Ihrer Individuellen Adapater diesen getView()

buttonDelete.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
    // Use position parameter of your getView() in this method it will current position of Clicked row button 
    // code for current Row deleted...    
    } 
}); 
+0

Was muss ich früher findenById? –

+0

@PaulBrewczynski natürlich – sudoman281

1

Ilses Klasse innerhalb der getView Methode Ihrer Adapterklasse.

holder.button.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 

    } 
}); 
4

Erstens, das wird sehr einfach für Sie sein, den Klick auf dieses Element zu behandeln. Sie müssen nur einen Listener hinzufügen mit: myButton.setOnClickListener(mBuyButtonClickListener). Diese Aktion wird normalerweise auf der getView(...) Implementierung Ihrer ListView durchgeführt.

Ihr Listener kann anhand der myListView.getPositionForView(myButton) die Position des Elements ermitteln. bei dieser Probe des Zuhörers ein:

private OnClickListener mBuyButtonClickListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     final int position = getListView().getPositionForView(v); 
     if (position != ListView.INVALID_POSITION) { 
      //DO THE STUFF YOU WANT TO DO WITH THE position 
     } 
    } 
}; 

Wenn dies geschehen ist, sollten Sie Probleme haben, die Sie auf den Artikel selbst und einige andere Berührungsereignisausbreitung zu behandeln.

So sollten Sie this article lesen, die die Verwendung mehrerer berührbarer Bereiche in einem ListView vollständig beschreibt. Es wird sehr hilfreich sein.

1

Ich schaute überall und keine der Antworten half mir, bis einer tat.

Was ich tat, war eine HolderView erstellen und verpackt all meine Textviews und andere Widgets in der getView mathod des Adpater:

diese Klasse setzte in:

static class ViewHolder 
{ 
    TextView text1; 
    TextView text2; 
    TextView text3; 
} 

und i decalared auch die gleichen diejenigen, die normalerweise wie sie jetzt sind seperate:

TextView text1; 
TextView text2; 
TextView text3; 

dann nach dem Aufblasen des Layouts in getView alle Ansichten und Widgets erklären:

holder = new ViewHolder(); 
holder.text1 = (TextView) vi.findViewById(R.id.textView2single); 
holder.text2 = (TextView) vi.findViewById(R.id.textView3single); 
holder.text3 = (TextView) vi.findViewById(R.id.textView4single); 

innerhalb der onClick Methode, i verwendet:

View parentView = (View) v.getParent(); 

und erklärt dann wieder alle meine Widgets dieses parentview mit:

text1 = (TextView) parentView.findViewById(R.id.textView2single); 
text2 = (TextView) parentView.findViewById(R.id.textView3single); 
text3 = (TextView) parentView.findViewById(R.id.textView4single); 

diese im zwingen mein onClick Dabei die Eltern zu bekommen Position des Listenansichts-Elements, daher können alle Widgets innerhalb dieses Elternteils einfach aufgerufen werden, und Sie können damit machen, was Sie möchten. Dies ist der einzige Weg, den ich gefunden habe, dass funktioniert.

0

Erstellen Sie eine benutzerdefinierte Listenansicht Adapter erweitern BaseAdapter und implementieren OnClickListener

public class ListAdapter extends BaseAdapter implements OnClickListener {} 

Überschreibung der getView Methode

@Override 
public View getView(int 
     position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View row = convertView; 
    ViewHolder holder = null; 

    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.list_item, parent, false); 
     holder = new ViewHolder(); 
     holder.b1= (Button) row.findViewById(R.id.b1); 
     b1.setOnClickListener(this); 
    else { 

     holder = (ViewHolder) row.getTag(); 

    } 
} 

jetzt die OnClick-Methode

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
     case R.id.b1: 
      //button b1 click event 
      break; 
    } 
} 

public class ViewHolder { 
    Button b1; 
} 
0

a Erstellen Sie außer Kraft setzen neue Ansichtstypvariable a nd weise es mit currenView zu (Prüfe ob iit null ist). Definiere Variablen (ImageButton hier) und setze viewId auf die unten angegebene Weise.

public View getView(int position, View convertView, ViewGroup parent) { 
     View itemview=convertView; 
     if (itemview==null) 
     { 
      itemview=getLayoutInflater().inflate(R.layout.group_list,parent,false); 

     } 
     final group_contacts currentcontact=g_contact.get(position); 
     ImageButton delete=(ImageButton) itemview.findViewById(R.id.imgbtn_delete); 
     delete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //Add your code here to run on tapping button 
      } 
     }); 
     return itemview; 


    } 
0

Um onClickListener() Methode auf einem Button eines ListView, verwenden Sie onClickListener() auf den Button in Adapter ‚s getView Methode beantragen.

Aber das Problem ist, werden Sie nicht in der Lage sein, den Wert von position Parameter von getView zu bekommen.

Um den position des Knopfes zu erhalten, den Sie berührt haben, müssen Sie getPositionForView() Methode auf Ihrem ListView anrufen.

Lets Diskus mit einem Beispiel zum besseren Verständnis

  • Betrachten Sie haben ein ListView namens ExampleListview

  • A Button auf sie ExampleButton benannt und u wollen onClickListener() auf, es zu benutzen.

    Examplebutton.setOnClickListener(new OnClickListener() { 
    
          @Override 
          public void onClick(View v) { 
         final int position= ExampleListview..getPositionForView(v); 
        /*Where 'v' is actually the 'View' object Which you are clicking.*/ 
    
    /*you can now right your code her & determine the your desired button by 
        using the position parameter */ 
    } 
    
Verwandte Themen