2015-08-26 14 views
0

有人知道如何在不使用匿名內部類的情況下製作下列代碼嗎?製作Android按鈕而不使用匿名內部類

final Button button = (Button) findViewById(R.id.button_id); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // Perform action on click 
     } 
    }); 
+0

檢查我回答 –

+0

你可以讓你的類實現OnClickListener,然後'button.setOnClickListener(this)'。你也可以使用butterknife來注入視圖。 – Raghunandan

+0

@ X.LINK請在StackOverFlow上學習[upvote](http://stackoverflow.com/help/someone-answers)和[Accept Answers](http://stackoverflow.com/help/accepted-answer),它會鼓勵用戶幫助你。 –

回答

1

您可以在佈局文件中使用android:onClick="anyMethodName"屬性爲您的按鈕 ,例如:

 <Button 
       android:id="@+id/button_id" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:onClick="myMethod" 
       android:text="Update" /> 

,並在你的類創建一個同名的方法是這樣的:

public void myMethod(View v){ // must use same name as in XML 

    // Perform action on click, this works like onClick() of anonymous inner class 
    Toast.makeText(this, "button clicked", Toast.LENGTH_SHORT).show(); 

} 

只要在上面的方法中放入你想要放入你的匿名內部類的onClick()中的任何東西,它就像魅力一樣工作。

的另一種方式是實現OnClickListener接口,然後簡單地把所有的邏輯在一個單一的onClick(View v)方法,通過註冊它的聽衆是這樣的:

button.setOnClickListener(this); 
+0

恩,你能詳細說明邏輯部分嗎?我在做「public void myMethod((Button)rootView.findViewById(R.id.strScnBtn))」,但它全是紅色的。 –

+0

@ X.LINK檢查我更新的答案 –

+0

不要使用'Button'作爲參數,使用'View'就像我有 –

2

你也可以寫自己的類實現View.OnClickListener,如果你想在不同的活動中重複使用它。

class MyListener implements OnClickListener { 
    @Override 
    public void onClick(final View v) { 
     // do something 
    } 
} 

,然後通過

button.setOnClickListener(new MyListener()); 

使用它,或者創建一個MyListener對象,可以重複使用:

MyListener myListener = new MyListener(); 
// ... 
button.setOnClickListener(myListener); 
1

也有讓您的Activity/Fragment實施OnClickListener的選項。然後,您可以使用開關盒來檢查已被點擊的視圖的ID並執行所需的邏輯。

0

爲什麼你不想要一個匿名的內部類?如果是的代碼風格的問題,您可以嘗試使用ButterKinfe

下面是如何將在活動中使用的示例(您可以在任何其他的類使用它)

public class MainActivity extends Activity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKinfe.inject(this); // This is where the listeners on set on the views 
    } 

    // Simple use case 
    @OnClick(R.id.button_id) 
    void onButtonClicked() { 
     //Do something with button 
    } 

    // If you want the view paramater in the callback just add it! 
    @OnClick(R.id.other_button_id) 
    void onOtherButtonClicked(View otherButton) { 
     //Do something with button 
    } 

}