2015-01-16 49 views
0

有沒有辦法在一行中的層次結構中的所有視圖上設置一個點擊偵聽器?我認爲我們必須做類似如下:單擊一個層次結構中所有視圖的監聽器?

<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爲我們做到這一點?

感謝

+0

沒有一條線,但如果你想保持你的Java代碼不那麼混亂,你可以將它們設置爲xml,如下所示http://stackoverflow.com/questions/18319711/android-eclipse-which-is-the -best路到外接一個對接上/ 18319759#18319759 – codeMagic

回答

0

是很好的例子,我是這麼認爲的BCZ IM也發現到集團公司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

的Android最短的路剛剛實現OnClickListener你,當你定義了android:的onClick = 「的someMethod」屬性在xml中。

<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 
} 

這可能是最快的方法。

0

好了,這是方式加入這一行中的XML的

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

並確保你寫在你的類此方法中,使用XML

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

這將觸發你的自己的方法