关于java:在android中的静态方法中使用“this”

Use “this” in static method in android

本问题已经有最佳答案,请猛点这里访问。

这是我的第一个Android应用程序,所以这可能是一个愚蠢的问题。所以,请考虑我是否犯了什么错误。

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

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

1
2
3
4
5
6
7
8
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();时,它要求使这个方法成为静态的。但是,当我使其静态化时,我的方法在"this"上会出现错误。

我已经读过这样和这样的文章,但我没有得到关于我的问题的帮助。

我试过我的片段:

1
2
 MainActivity mc = new MainActivity();
 mc.showDeviceListDialog();

但这显示NullPointerException。

所以,请告诉我如何在没有这些错误的情况下从片段中调用它。谢谢您。


Fragment有一个getActivity()方法,它返回与Fragment关联的Activity

因此,可以从Fragment调用此方法,而不必使其成为static

1
getActivity ().showDeviceListDialog ();

编辑(感谢用户1506104的评论):

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

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

这是假设Fragment与该类型的Activity关联。


这是指向当前实例的引用,因此在静态方法中没有意义…做一些像

1
MainActivity mc = new MainActivity();

不是Android想要你创建一个活动的方式…您需要获得像调用getActivity()方法这样的活动


不能创建这样的活动:mainActivity mc=new mainActivity();。Android对此负责。用意向代替。有关静态方法,请参阅本教程https://docs.oracle.com/javase/tutorial/java/javaoo/classvars.html。