2012-04-20 8 views
1

TextViewをサブクラス化して、私のためにいくつかの追加データを保持する必要があります。これらの新しいViewオブジェクトをカスタムListAdapterを使用して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(USERID)と同じデフォルトの動作
  2. を作成することができますがあります
  3. AのTextViewクラスListAdapterによって簡単に管理されています

私はこれをこのように見たことがないと感じています。

答えて

0

私が知っている限り、静的ではないことは、クラスのインスタンスごとに一度メモリ内にあります。つまり、このデザインでは、コードは素晴らしく清潔ですが、見た目やメモリの使用量に違いはありません。

+0

「クラスの各インスタンスに対して一度」という意味には、各インスタンスのメモリフットプリントに 'onClick()'コードが含まれている必要があります。しかし、私の理解では、すべてのメソッドは静的(クラスごとに1回)のように保持されていますが、呼び出しスタックは**インスタンス**を認識させるように働きます(これは 'this') – Chris

+0

同じように理解してください、私の悪い説明には申し訳ありません。変数は状態を持つため、インスタンスごとにしかありません。メソッドは状態を持つべきではありません。そのため、それらは一度だけメモリにロードされます。 – Paul

関連する問題