2012-04-20 25 views
1

我需要子類化TextView讓它爲我保留一些額外的數據。我使用自定義ListAdapter將這些新的View對象放置到ListView中。在View子類中實現偵聽器有問題嗎?

我有一個動作,我想執行onClick(),並且它是基於附加數據對ListView的所有元素的相同動作。

請問這個定義有什麼缺點或者會引起什麼問題嗎?

public class UserTextView extends TextView implements OnClickListener { 

    public int userId; 

    public UserTextView(Context context) { 
     super(context); 

     this.setClickable(true); 
     this.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

    } 

} 

我希望,在我的onClick()實現的代碼實際上不會被複制,但只存在於內存中一次,用的具體UserTextView數據被調用。所以我不希望額外的內存使用。事實上,沒有額外的類和對象(匿名或不是)可能會提高性能(儘管不是真正有意義的方式)。

如果需要,可以調用setOnClickListener()方法來更改偵聽器,如果我需要不同的特定對象的行爲。

它只是似乎很好地成爲我需要什麼:

  1. 一個TextView,可容納額外的數據(用戶ID)
  2. 一個TextView類,將具有相同的默認行爲
  3. 可以創建並通過ListAdapter輕鬆管理

我只是覺得我從來沒有見過這樣做過,並且懷疑有些事情我錯過了。

回答

0

據我所知,一切都不是靜態的,在每個類的實例內存在一次。這意味着通過這種設計,您的代碼非常乾淨,但看起來和內存的使用情況並沒有什麼不同。

+0

那麼取決於你的意思是「對於類的每個實例一次」這可能意味着每個實例的內存佔用必須包含'onClick()'代碼。但我的理解是,所有的方法都像靜態一樣(每個類一次),但是調用堆棧的作用是讓它知道**實例**它應該運行(因此'this') – Chris 2012-04-20 09:18:11

+0

我也以同樣的方式理解它,抱歉我的錯誤解釋。每個實例只有變量,因爲它們有一個狀態。方法不(不應該)有一個狀態。因此,他們只加載一次到內存中。 – Paul 2012-04-20 09:58:55