Android / Java关闭onClick问题?

时间:2011-02-20 02:21:07

标签: java android reference closures

这基本上是我的代码:

private Dialog mDialog;
private BluetoothAdapter mBluetoothAdapter;

... 

private void onCreate(Bundle savedInstanceState) {
    ...
    enabltBTButton = getMyButton();
    enableBtButton.setOnClickListener(this.enableBT);
    ...
}

...

public View.OnClickListener enableBT = (new View.OnClickListener() {
    public void onClick(View view) {
        mDialog.hide();
        mBluetoothAdapter.enable();
        Toast.makeText(Main.this, "Bluetooth enabled", Toast.LENGTH_LONG).show();
        return;
    }
});

问题:当我点击按钮时没有任何反应!我很肯定enableBTButton指的是正确的对象,但我的猜测是,这与我的引用mDialogmBluetoothAdapter,有关,这两者都在内部onClick之外声明{ {1}}功能。

对此有什么替代解决方案?

3 个答案:

答案 0 :(得分:1)

在粘贴的代码中:

private void onCreate()

但它应该是:

protected void onCreate (Bundle savedInstanceState)

如果它确实是代码中的“private onCreate()”,那么框架将不会调用它,因为它不会覆盖Activity.onCreate(Bundle),这意味着onClickListener没有设置为你的按钮也是。

答案 1 :(得分:0)

我认为问题在于您正在调用函数setOnClickEventListener,但您应该调用setOnClickListenersetOnClickEventListener是你写的一个函数吗?

(顺便说一句,您可以通过注释掉这些行来测试您对引用mDialog和/或mBluetoothAdapter的猜测。我不认为这是问题所在。)

答案 2 :(得分:0)

而不是随波逐流,我决定使用AlertDialog,这似乎可以很好地完成工作。谢谢大家的解决方案。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Bluetooth is not enabled...")
                .setCancelable(false)
                .setPositiveButton("Enable it!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Toast.makeText(getApplicationContext(), "Bluetooth enabled", Toast.LENGTH_LONG).show();
                                    ...
                    }
                })
                .setNegativeButton("Leave it!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Toast.makeText(getApplicationContext(), "Bluetooth still disabled", Toast.LENGTH_LONG).show();
                    }
                });
            AlertDialog mAlert = builder.create();
            mAlert.show();