0

在我的代碼中,我有fragment和gridview。此外我有這個Gridview的ArrayAdapter。現在我需要改變點擊的網格單元格的背景顏色。我通過設置onClickListener來做到這一點。在適配器和片段中設置onClickListener的區別

問題是設置onClickLister for GridView單元格在適配器和片段之間有什麼區別?

回答

1

我要試着澄清一下你的問題中涉及的不同的android實體。

A GridViewView

  • 您可以將Click Listeners分配給視圖,以便它們對用戶單擊作出反應。任何觀點有一個通用的clicklistener(View.setOnClickListener)每當用戶點擊視圖

  • 複雜視圖可以有其他幾個專業clicklisteners的任何部分被調用,例如,菜單式的視圖(列表視圖,GridView的,等等)也將有一個setOnItemClickListener/setOnItemLongClickListener被調用每當用戶點擊一個項目(與整個視圖)

Adapter僅僅是一個類,它的目的是要建立與數據視圖的數據消費觀點。例如,您的GridViewAdapter:它將爲每行調用一次,它將構造每個行視圖(在getView方法中)。每一行視圖將(可能)一ViewGroupFrameLayout/RelativeLayout ...)裏面的一些其他視圖(即圖標ImageView,名TextView,地址......)

所以適配器本身不接受clicklisteners 。但由適配器創建的視圖可以!例如,假設你的GridView是一個電話列表:

  • GridViewItemClickListener反應到選定的電話列表條目,並顯示有關該聯繫人

  • GridView適配器建立的觀點,每資訊行。想象一下,你的「接觸」行有3個觀點:標題,圖標和按鈕來刪除的聯繫人

  • 您轉接器內,你將指派一名onClickListener的「刪除聯繫人」按鈕查看。請注意,您始終將onClickListeners分配給視圖,而不是轉接器本身(「您無法單擊轉接器!」)

  • 關於碎片,將它們視爲「子活動」。片段包含具有多個視圖的根佈局。再次,它將在您分配clicklisteners的視圖中,而不是片段本身。

+0

感謝您的回答。正如我現在看到的,我問我的問題是錯的。我想知道的是,在適配器類的getView方法中調用'convertView.setOnClickListener'和在我的片段中調用'GridView.setOnItemClickListener'有什麼區別? – Tret

+0

恩,這實際上是一個有趣的問題。在典型的情況下,如果視圖支持它,您應該從適配器外部執行它:您的適配器將更通用並且易於重用。在適配器中,儘量使用盡可能少的應用程序邏輯。看看http:// stackoverflow。COM /問題/ 23893313/onclicklistener上適配器-X-onitemclicklistener-ON-列表視圖。 – rupps

+0

但是,有些情況下,在適配器內部進行操作是有意義的:想象一下,您有一個複雜的行,其中包含許多子元素,並且您希望捕獲點擊容器以對子元素執行某些操作(不影響應用程序邏輯,例如重新安排它們)。在這種情況下,它是有意義的,因爲點擊操作與應用程序無關,但僅與行本身有關 – rupps

相關問題