Java 使用「;这";android中的静态方法

Java 使用「;这";android中的静态方法,java,android,Java,Android,这是我的第一个android应用程序,所以这可能是一个愚蠢的问题。所以,请考虑我是否有任何错误。 我正在构建一个与蓝牙相关的应用程序 我在我的MainActivity.java中有一个方法: public void showDeviceListDialog() { BluetoothDeviceListDialog dialog = new BluetoothDeviceListDialog(this); dialog.setOnDeviceSelectedListener(th

这是我的第一个android应用程序,所以这可能是一个愚蠢的问题。所以,请考虑我是否有任何错误。

我正在构建一个与蓝牙相关的应用程序

我在我的
MainActivity.java中有一个方法:

public void showDeviceListDialog() {
    BluetoothDeviceListDialog dialog = new BluetoothDeviceListDialog(this);
    dialog.setOnDeviceSelectedListener(this);
    dialog.setTitle("Paired Devices");
    dialog.setDevices(bluetoothSerial.getPairedDevices());
    dialog.showAddress(true);
    dialog.show();
}
我需要从另一个片段调用这个方法。因此,当我这样调用此方法时:
MainActivity.showDeviceListDialog()它要求将方法设置为静态。但是,当我将其设置为静态时,我在我的方法中的“此”[
对话框中得到错误

我已经读过一些帖子,比如和,但是我没有得到关于我的问题的帮助

我从我的片段中尝试过:

 MainActivity mc = new MainActivity();
 mc.showDeviceListDialog();
但这显示了NullPointerException

所以,请告诉我如何从我的片段调用它,而不出现这个错误。
谢谢。

这是指向当前实例的引用,因此在静态方法中没有意义 ... 做一些类似的事情

MainActivity mc = new MainActivity();
不是android希望您创建活动的方式。。。
您需要像调用
getActivity()
那样获取活动;方法

您不能创建这样的活动:MainActivity mc=newmainActivity()。Android对此负责。使用意图代替。
有关静态方法,请参阅本教程。

一个
片段
有一个方法,该方法返回与
片段
关联的
活动

因此,您可以从
片段
调用此方法,而无需将其设置为
静态

getActivity ().showDeviceListDialog ();
编辑(感谢用户1506104的评论):

实际上,您必须将
getActivity()
返回的
Activity
转换为
MainActivity
才能调用该方法:

((MainActivity) getActivity ()).showDeviceListDialog ();

这是假设
片段
与该类型的
活动
关联

您可以使用接口作为活动的回调。永远不要执行
MainActivity mc=newmainActivity()您不能实例化您的活动您不能将
静态
一起使用。您不应该在扩展
活动的类上使用
new
well@Blackbelt很明显你能做到,但这并不意味着你应该,伙计们,这不是重复的。尽管问题似乎是关于
静态方法的用法,但他提出的解决方案实际上并不涉及创建静态方法。这是一个从片段访问活动的问题。感谢您的评论,它并没有真正解决最初问题的解决方案,即调用activity方法。OP只允许IDE将方法设置为static,考虑到所讨论的片段是具有
showDeviceListDialog()
的活动的子级,这应该可以工作。感谢您的回答@Eran。它只是起作用了!XDwe不应该在答案部分包含URL