0

在我的应用程序中,我有多个 TextViews(此元素的数量在活动创建时会发生变化)。我想在触摸每个元素时执行一些功能:例如更改背景。我尽量避免为每个元素编写相同的函数。我希望它像 jQuery 一样工作,所以如果我触发一些来自某个类的事件,这个元素就会改变。我希望它清楚,谢谢!

4

2 回答 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 回答