簡體   English   中英

從自定義onClickListener類調用活動方法

[英]calling an activity method from custom onClickListener class

我試圖從自定義onClickListener對象調用保留在MainActivity類中的方法。 可變范圍存在問題。

所以在我的MainActivity中,我有:

Button resetButton = (Button) findViewById(R.id.ResetButton);
View.OnClickListener myListener = new MyListener(GameBoard, width);
resetButton.setOnClickListener(myListener);

這是myListener類的樣子:

public class MyListener implements View.OnClickListener
{
    private static MainActivity mainActivity;
    public MyListener(MainActivity mainActivity) {
    this.mainActivity = mainActivity;
}

    @Override
    public void onClick(View v) {
        mainActivity.myMethod();
    }
}

和方法也在MainActivity中使用一些MainActivity實例變量:

public void myMethod()
{
    InstanceVariable++;  // for example
}

然后,在我通過單擊resetButton傳遞給myListener構造函數的mainActivity對象上調用myMethod時,出現有關MainActivity InstanceVariable作用域的錯誤。 我是android編程的初學者,所以我無法完全理解它的來源。

當我將此InstanceVariable傳遞給myListener object constructor時,此錯誤消失。 我認為應該有一種更簡單的方法。

改成:

public void myMethod() {
    mainActivity.instanceVariable++;  // for example
}

instancevariable在MyListener類中不可見,您必須指出它在mainActivity對象中。

如果您的instanceVariable是私有的,請在mainActivity中創建getter函數:

public void getInstanceVariable() {
   return this.instanceVariable
}

並以這種方式使用它:

public void myMethod() {
        mainActivity.setInstanceVariable(mainActivity.getInstanceVariable()+1);  // for example
    }

使InstanceVariable符合

public static int InstanceVariable;

並使用它

 @Override 
    public void onClick(View v) {
        MainActivity.InstanceVariable++;
    } 

不要為少於8行的函數創建方法

嘗試這個 :

使您的聽眾成為您活動的內在類,然后:

class MyListener implements View.OnClickListener {

public MyListener() {

         }

@Override
public void onClick(View v) {
    MainActivity.this.myMethod();
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM