单击一个层次结构中的所有视图的侦听器?

时间:2015-01-16 14:16:13

标签: android

有没有办法在一行中的层次结构中的所有视图上设置一个单击侦听器?我相信我们必须做以下事情:

<LinearLayout id="@+id/parent">
    <TextView id="@+id/item1" />
    <TextView id="@+id/item2" />
    <TextView id="@+id/item3" />
</LinearLayout>

OnClickListener listener = ...;

View view = inflater.inflate(R.layout.the_above_layout);
view.setOnClickListener(listener);
view.findViewById(R.id.item1).setOnClickListener(listener);
view.findViewById(R.id.item2).setOnClickListener(listener);
view.findViewById(R.id.item3).setOnClickListener(listener);
...

但是对于大视图层次结构来说,这确实是很多代码。我可以做一个递归函数来做到这一点,但是有什么东西可以由android为我们这样做吗?

由于

3 个答案:

答案 0 :(得分:2)

当您在xml中定义android:onClick =“someMethod”属性时,Android会为您实现OnClickListener。

<LinearLayout id="@+id/parent">
    <TextView id="@+id/item1" android:onClick="myFancyMethod" />
    <TextView id="@+id/item2" android:onClick="myFancyMethod" />
    <TextView id="@+id/item3" android:onClick="myFancyMethod" />
</LinearLayout>

然后在你的Activity中定义一个这样的方法。

public void myFancyMethod(View v) {
// does something very interesting
}

这可能是最快的方法。

答案 1 :(得分:0)

这是一个很好的例子我认为如此bcz我也找到了clic的最短路径i refer this site for click listner

public class MyActivity extends Activity implements View.OnClickListener {

Button button1, button2, button3;

@Override
public void onCreate(Bundle bundle) {
    super.onCreate();

    ...

    button1 = (Button) findViewById(R.id.button1);
    button2 = (Button) findViewById(R.id.button2);
    button3 = (Button) findViewById(R.id.button3);

    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
    button3.setOnClickListener(this);
    }
    @Override
     public void onClick(View v) {
     switch(v.getId()) {
       case R.id.button1:
       // do stuff;
       break;
       case R.id.button2:
       // do stuff;
       break;
   ...
 }
 }

答案 2 :(得分:0)

嗯,这是在xml中添加这一行的方法 -

<TextView id="@+id/item1" 
android:onClick="myMethod"
/>

并确保在您的类中使用xml编写此方法

public void myMethod(View v){
 //content goes here
}

这会触发你自己的方法