2011-11-28 50 views
2

我試圖做多OnClickListener方法在我的程序中5個按鈕,我已經能夠宣佈他們,我做了使用被點擊了什麼XML ID開關,但我需要一個參數爲setOnClickListener方法,當我打電話時,所有的工作都是空的。我也試過通過這個,所以這個方法有上下文。我用什麼作爲setOnClickListener()方法的參數?

下面是一些代碼:

add.setOnClickListener(null); 
     sub.setOnClickListener(null); 
     mult.setOnClickListener(null); 
     div.setOnClickListener(null); 
     equal.setOnClickListener(null); 

回答

3

參數必須有一些對象實現OnClickListener接口的實例。做到這一點的方法之一是使用匿名內部類:

add.setOnClickListener(new OnClickListener{ 
    public void onClick(View view){ 
//your event handler code here 
} 
}); 

另一種方式是讓你的類實現OnClickListener --do,通過改變你的聲明是這樣的:

public class MyActivity extends Activity implements OnClickListener{ 

再定義爲的onClick方法的實現:

public void onClick(View view){ 
    if(view == add){ 
     //handle add button click 
    }else if (view == sub){ 
     //handle sub button click 
    } 
    //etc 

} 

然後安裝監聽器,你可以這樣做:

add.setOnClickListener(this); 
+0

感謝您的回答,我什麼這個解決:我聲明瞭監聽器和XML中的事件處理程序方法的名稱,如下所示: 安卓的onClick =「clickHandler事件」 /> 參考方法clickHandler()在我的java文件中。這消除了對setOnClickListener()方法的需求。 –

0

從.NET背景的,我有同樣的事情掙扎在第一。這只是一種與.NET不同的語法,因爲java不支持屬性,或者像我習慣的那樣的事件。這裏有一個如何做到這一點使用一類級別的點擊收聽變量一個簡單的例子...

@Override 
private void onCreate(Bundle bundle) { 
    myButton.setOnClickListener(this.genericButtonListener); 
} 

private OnClickListener genericButtonListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    //v represents your button 
    }   
}; 
0

您這裏需要一個具體的類。例如:

imageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // your code here 
     } 
    }); 
0

如果你看一下documentation,你會發現它需要View.OnClickListener作爲參數。如果你需要五個獨立的聽衆,你是不會在其他地方使用,你可以通過一個匿名類實現的onClick(視圖v),這樣

add.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v){ 
     //do required actions here 
    } 
}); 
2

你應該通過View.OnClickListener這個功能,是一個偵聽器,一旦按鈕被點擊就會被調用。

要做到這一點,您可以:

  1. 聲明此監聽器在佈局XML,與按鈕,在按鈕4 this site規定。

  2. 創建的View.OnClickListener一個實例,並把它傳遞給setOnClickListener方法如下面(從android site兩者這是很大的源)的例子:

    // Create an anonymous implementation of OnClickListener 
    private OnClickListener mCorkyListener = new OnClickListener() { 
        public void onClick(View v) { 
         // do something when the button is clicked 
        } 
    }; 
    
    protected void onCreate(Bundle savedValues) { 
        ... 
        // Capture our button from layout 
        Button button = (Button)findViewById(R.id.corky); 
        // Register the onClick listener with the implementation above 
        button.setOnClickListener(mCorkyListener); 
        ... 
    } 
    

由於View.OnClickListener是一個接口,您的活動也可以實現它,並且本身就是監聽器,在這種情況下,您會將活動實例(this)傳遞給setOnClickListener方法,但這只是一個選項,並不是推薦的IMHO。

相關問題