在我的应用程序中,我有多个TextViews(这些元素的数量在创建活动时正在改变)。我想在触摸每个元素时执行一些功能:例如更改背景。我尽量避免为每个元素编写相同的函数。 我希望它像jQuery一样工作,所以如果我触发一些来自某个类的事件, this 元素会发生变化。 我希望很清楚,谢谢!
答案 0 :(得分:2)
让您的活动实施OnClickListener
,然后在onClick
方法中输入您的公共代码,并在每个setOnClickListener(this);
上致电TextViews
。
如果您单击了多种类型的View,请将TextView特定代码括在:
中if(<name of the view parameter in your onClick method) instanceof TextView)
{
//Code here
}
修改强>
另一种方法是创建自己的Custom 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);
答案 1 :(得分: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上的auto complete来检查tv.setOn...
的所有选项