如何在Android中为相同元素的组运行相同的代码

时间:2013-01-07 10:02:07

标签: android

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

2 个答案:

答案 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...的所有选项