2012-10-04 42 views
8

,因爲我們知道採用了android網格視圖,我們可以做如下,可點擊項目時得到通知:Android開位置

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(); 
    } 
}); 

我們也知道,如果在網格單元格包含一個可點擊的項目,比如一個按鈕,上面的內容不會被解僱。現在我有一個網格視圖,每個單元格都有自己的按鈕,所以現在當用戶點擊按鈕時,它將有自己的操作基於單元格按鈕駐留在,我的問題是,我怎麼能訪問按鈕處理程序中的單元格位置?

感謝

+0

您是否在使用GridView的自定義適配器? – dennisdrew

+0

是的,我有一個自定義的只是擴展BaseListAdapter – user1697965

回答

28

假設你正在使用GridView的自定義適配器,在getView方法,你可以將代碼簡單地添加到包含傳遞到getView位置的按鈕對象:

button.setTag(new Integer(position)); 

然後在onClickListener方法,與在(按鈕)通過視圖,你可以這樣做:

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

然後從那裏辦理位置值。

編輯: 看來最好的做法是要做到:

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

,而不是使用整數構造。

+5

哦哇,謝謝。我唯一的問題是:爲什麼沒有這個答案有5000個upvotes?我是唯一一個在GridViews中放置按鈕的人嗎? –

+1

謝謝!我只是更新了我的答案,以考慮最佳做法。建議使用Integer.valueOf(position)而不是構造函數。 – dennisdrew

+0

偉大的解決方案!現在,'Integer.valueOf(position)'不是必需的,只是通過'position'也可以。 – 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(); 
    } 
});