2012-10-04 6 views
8

wie wir mit Android Rasteransicht kennen, können wir folgendes tun und benachrichtigt, wenn Einzelteil geklickt wird:android get Position geklickt Artikel in gridview

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    Toast.makeText(PopularCapitActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 
    } 
}); 

wir wissen auch, dass, wenn die Zelle im Gitter enthält einen anklickbaren Gegenstand, sagen wir einen Knopf, der obige wird nicht gefeuert.

so habe ich derzeit eine Rasteransicht, jede Zelle hat eine eigene Schaltfläche, so dass jetzt, wenn der Benutzer auf die Schaltfläche klickt, wird es eine eigene Aktion basierend auf der Zelle die Schaltfläche befindet sich, meine Frage ist, wie kann ich Zugriff auf die Zellenposition im Button-Handler?

dank

+0

Verwenden Sie einen benutzerdefinierten Adapter für das GridView? – dennisdrew

+0

Ja, ich habe eine benutzerdefinierte, nur die Erweiterung des BaseListAdapter – user1697965

Antwort

28

Vorausgesetzt, dass Sie einen benutzerdefinierten Adapter für das Gridview verwenden, in der getView Methode Sie einfach einen Tag das Button-Objekt hinzufügen können, um die Position in getView bestanden enthält:

button.setTag(new Integer(position)); 

Dann , in der OnClickListener Methode, mit der Ansicht, die in (den Knopf) geleitet wird, können Sie tun:

Integer position = (Integer)view.getTag(); 

Und dann von dort den Positionswert behandeln.

EDIT: Es scheint die beste Praxis zu tun wäre:

button.setTag(Integer.valueOf(position)); 

anstatt den Integer-Konstruktor.

+5

Oh wow, danke. Meine einzige Frage ist: Warum hat diese Antwort nicht 5000 Upvotes? Bin ich die einzige Person, die Buttons in GridViews setzt? –

+1

Danke! Ich habe gerade meine Antwort aktualisiert, um die beste Vorgehensweise zu berücksichtigen. Es wird empfohlen, Integer.valueOf (position) anstelle des Konstruktors zu verwenden. – dennisdrew

+0

Tolle Lösung! Nun wird "Integer.valueOf (position)" nicht benötigt, aber nur "position" wird auch funktionieren. – jpyams

0
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
    { 
     String a = String.valueOf(position); 
     Toast.makeText(getApplicationContext(), a, Toast.LENGTH_SHORT).show(); 
    } 
});