2012-04-20 31 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