2012-10-04 15 views
8

jak wiemy użyciu widoku android siatki, możemy wykonać następujące czynności i otrzymywać powiadomienia, gdy element zostanie kliknięty:android pozycja get od klikniętego elementu w 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(); 
    } 
}); 

wiemy też, że jeśli komórka w siatce zawiera klikalny element, powiedzmy przycisk, powyższe nie zostanie zwolnione.

więc obecnie mam widok siatki, każda komórka ma swój własny przycisk, więc teraz, gdy użytkownik kliknie przycisk, będzie miał własną akcję w oparciu o komórkę, w której znajduje się przycisk, moje pytanie brzmi: jak mogę uzyskać dostęp do pozycji komórki w programie obsługi przycisku?

dzięki

+0

Czy używasz niestandardowego adaptera do GridView? – dennisdrew

+0

Tak, mam niestandardowy po prostu rozszerzenie BaseListAdapter – user1697965

Odpowiedz

28

Zakładając, że używasz adaptera niestandardową dla GridView w sposobie getView można po prostu dodać tag do obiektu Button, który zawiera pozycję przekazany do getView:

button.setTag(new Integer(position)); 

Następnie w sposobie onClickListener, z poglądem, że przechodzi w (przycisku) można zrobić:

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

A potem obsłużyć wartość pozycji stamtąd.

EDIT: Wydaje się, że najlepszym rozwiązaniem byłoby zrobić:

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

zamiast przy użyciu konstruktora Integer.

+5

Oh wow, dziękuję. Moje jedyne pytanie brzmi: dlaczego ta odpowiedź nie zawiera 5000 upomnień? Czy jestem jedyną osobą, która umieszcza przyciski w GridViews? –

+1

Dzięki! Właśnie zaktualizowałem swoją odpowiedź, aby uwzględnić najlepszą praktykę. Zalecane jest użycie wartości Integer.valueOf (pozycja) zamiast konstruktora. – dennisdrew

+0

Świetne rozwiązanie! Teraz jednak "Integer.valueOf (position)" nie jest wymagane, samo działanie 'position' również będzie działać. – 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(); 
    } 
}); 
Powiązane problemy