在我的应用程序中,我有多个 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
}
编辑
另一种方法是创建您自己的自定义 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 回答