私のアプリには複数の TextViews があります (この要素の数はアクティビティの作成時に変化します)。各要素のタッチでいくつかの機能を実行したい: たとえば、背景を変更します。各要素に対して同じ関数を記述しないようにしています。jQuery のように動作するようにしたいので、あるクラスからのイベントをトリガーすると、この要素が変更されます。私はそれが明確であることを願っています、ありがとう!
質問する
43 次
2 に答える
2
アクティビティにを実装してもらいOnClickListener
、onClick
メソッドに共通コードを配置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 に答える