0

私のアプリには複数の TextViews があります (この要素の数はアクティビティの作成時に変化します)。各要素のタッチでいくつかの機能を実行したい: たとえば、背景を変更します。各要素に対して同じ関数を記述しないようにしています。jQuery のように動作するようにしたいので、あるクラスからのイベントをトリガーすると、この要素が変更されます。私はそれが明確であることを願っています、ありがとう!

4

2 に答える 2

2

アクティビティにを実装してもらいOnClickListeneronClickメソッドに共通コードを配置setOnClickListener(this);して、それぞれを呼び出しますTextViews

クリックされているビューのタイプが複数ある場合は、TextView固有のコードを次のように囲みます。

if(<name of the view parameter in your onClick method) instanceof TextView)
{
    //Code here
}

編集

もう1つの方法は、独自のカスタムTextViewを作成し、そのメソッド自体をオーバーライドすることです。何かのようなもの:

public class MyTextView extends TextView {
//Various constructors go here

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            //Do your stuff here, your textview has been touched
            return true;
        }
        return super.onTouchEvent(event);
    }

}

TextView tv = new TextView(context);次に、を使用する代わりに、MyTextView tv = new MyTextView(context);

于 2013-01-07T10:05:31.133 に答える
0

単純:

 onCreate( //...
 // do your layout creation
 TextView tv = new TextView(context)
 tv.setOnClickListener(clickListener);
 tv.setTag(0); // this tag can be any object. So feel free to add a KEY_string, or anything that u might use to later identify your view on the click listener.

 tv = new TextView(context);
 tv.setOnClickListener(clickListener);
 tv.setTag(1);

  } // finish on create

  private OnClickListener clickListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
             int id = (Integer)v.getTag();
             switch(id){
                 case 0):
                    // do stuff
                 case 1:
                    // do other stuff       
    }
};

必要に応じて、他のいくつかのリスナーを使用することもできます。Eclipse でオートコンプリートを使用して、すべてのオプションを確認してください。tv.setOn...

于 2013-01-07T10:09:15.480 に答える