Android - 从对话框中调用非静态函数

时间:2016-03-17 02:19:27

标签: java android

我制作的游戏应用会在游戏结束时显示extlibs。在对话框中,有一个AlertDialog可以再次播放。

我希望按钮调用我已经为positiveButton方法创建的函数,但我不希望函数是静态的。

以下是我的onCreate()方法:

onCreate

我想从对话框中调用protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setup(); } 函数。

怎么会这样呢?

提前致谢!

3 个答案:

答案 0 :(得分:2)

它不必是静态的。如果您对肯定按钮的回调是匿名或非静态内部类,则它可以访问外部类的非静态方法。您只需从回调中调用setup()即可。

当然,如果您不使用匿名或非静态内部回调类,则不会出现这种情况,在这种情况下,您必须使Activity方法静态才能调用它。

This answer显示了如何操作。

答案 1 :(得分:0)

如果您像我在最新项目中一样使用DialogFragment,您可以创建一个界面。例如:

/// Inside my DialogFragment
public interface ChooserListener {
    public void setupDialogListener();
}

// Inside my DialogFragment
@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    try {
        mListener = (ChooserListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()+" must implement the ChooserListener interface.");
    }
}

然后您可以使用... implements YourDialogFragment.YourListener将界面实现到您的应用程序中。现在,您必须在侦听器中将预定义函数实现到主活动中,并且只需从Dialog内部触发它们即可。如需进一步参考,请参阅Dialogs - Passing Events

在你的情况下,你应该写一个这样的函数:

public void setupDialogListener() {
     setup();
}

答案 2 :(得分:0)

基于@ arsent的回答基本思路,这对我有用:

{{1}}

感谢大家的帮助!