2017-04-18 105 views
-2

我有一個片段中的3個按鈕,我想使用相同的單擊事件。這怎麼能在一個片段中實現呢?一個片段中的多個按鈕的OnClick處理程序

XML

<Button 
    android:id="@+id/btn_1" 
    android:onClick="btnClick_DoSomething" 
    android:text="@string/one"/> 

<Button 
    android:id="@+id/btn_2" 
    android:onClick="btnClick_DoSomething" 
    android:text="@string/two"/> 

<Button 
    android:id="@+id/btn_3" 
    android:onClick="btnClick_DoSomething" 
    android:text="@string/three"/> 

爪哇

@Override 
public void btnClick_DoSomething(View v) { 

} 

錯誤

@Override(片段Java類內)在紅色變成下劃線並返回以下錯誤

Annontations該處不允許

我想onClick事件是相同的所有3個按鈕

回答

-1

你想覆蓋的方法是什麼?是否有任何父類有一個方法btnClick_DoSomething?在佈局XML中設置點擊偵聽器時,您無需重寫任何內容。只要確保在使用此佈局的活動類中存在具有void返回類型和View作爲其唯一參數的同名方法

在同一個onClick處理程序中區分來自不同視圖的點擊的一般方法是通過編號來標識它們

public void btnClick_DoSomething(View v){ 
    switch(v.getId()){ 
     case R.id.btn_1: 
       // handle click from button 1 
       break; 
     case R.id.btn_2: 
       // handle click from button 2 
       break; 
     case R.id.btn_3: 
       // handle click from button 3 
       break; 
    } 
} 
+0

我想讓onClick事件對所有3個按鈕都是一樣的 – MacaronLover

+0

@MacaronLover這就是我的答案設置。點擊三個按鈕中的任何一個都會調用btnClick_DoSomething(...)函數。無論按下什麼按鈕,您是否都想要執行完全相同的操作?在這種情況下,您可以完全刪除switch語句,只需在該btnClick_DoSomething函數中執行所需的任何操作即可。 – Stephen

1

由於您不重寫該方法,因此不需要編寫@Override註釋。只需使用

public void btnClick_DoSomething(View v) { 


} 

您將在運行時得到此方法的回調。

+0

我想讓所有3個按鈕的onClick事件都相同 – MacaronLover

+0

編輯了我的答案。這樣你可以處理所有3個按鈕相同的onClick事件 – Passiondroid

+0

這需要去哪裏? 'onCreateView' /'onActivityCreated' /別的地方? – MacaronLover

-1

這裏有一些誤解。要覆蓋一個Click事件,您Fragment需要實現View.OnClickListener界面是這樣的:

public class YourFragment extends Fragment implements View.OnClickListener{ 

    @Override 
    public void onClick(View v) { 

    } 
} 

注意,該方法的名稱必須是onCLick,必須返回void並收到
一個View作爲參數從overrided接口。在這種情況下,你需要設置一個偵聽到每個按鈕在您的片段:

btn1 = (Button) view.findViewById(R.id.btn_1); 
btn1.setOnClickListener(this); 

在此方法中,你可以控制單擊了哪個對象由it's ID

@Override 
     public void onClick(View v) { 
     int id = v.getId(); 
     switch(v.getId()){ 
     case R.id.btn_1: 
       // handle click from button 1 
       break; 
     case R.id.btn_2: 
       // handle click from button 2 
       break; 
     case R.id.btn_3: 
       // handle click from button 3 
       break; 
     } 
     } 

或者,你不」噸需要覆蓋的方法,所以去掉anotation,將工作的優良:

public void btnClick_DoSomething(View v) { 
      switch(v.getId()){ 
      case R.id.btn_1: 
        // handle click from button 1 
        break; 
      case R.id.btn_2: 
        // handle click from button 2 
        break; 
      case R.id.btn_3: 
        // handle click from button 3 
        break; 
      } 
     } 
+0

我希望onClick事件對於所有3個按鈕都是相同的 – MacaronLover

+0

第一個示例在您的案例中運行良好 –

+0

爲什麼downvote? –

-1

你根本就沒有做它在XML,做到這一點在Java中,而不是:

<Button 
    android:id="@+id/btn_1" 
    android:text="@string/one"/> 

<Button 
    android:id="@+id/btn_2" 
    android:text="@string/two"/> 

<Button 
    android:id="@+id/btn_3" 
    android:text="@string/three"/> 

然後...

private final OnClickListener onClick = new OnClickListener(){ 
    @Override 
    public void onClick(View view){ 
     switch(view.getId()){ 
      ... cases... 
     } 
    } 


    somewhere initialising the views you do: 
    fragmentView.findViewById(R.id.btn_1).setOnClickListener(onClick); 
    fragmentView.findViewById(R.id.btn_2).setOnClickListener(onClick); 
    fragmentView.findViewById(R.id.btn_3).setOnClickListener(onClick); 

} 
+0

我想要所有的3個按鈕 – MacaronLover

+0

onClick事件是相同的,它是。只要刪除「開關」 – Budius

-1

,而不用聲明在XML佈局文件中的onClick方法,你可以有你的片段執行View.onClickListener接口,覆蓋onClick(),並設置所有3個按鈕onClickListener這樣btn.setOnClickListener(this)。把你想要的所有3個按鈕的行爲放在onClick()。所有3個都將具有相同的行爲(除非您在onClick()中檢查事件來自哪個按鈕)。

相關問題