在android

时间:2016-10-06 07:46:12

标签: java android

这是我的第一个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();它要求创建方法 Static 。但当我正在制作静态时,我在“ this [ dialog.setOnDeviceSelectedListener( <在我的方法上强> ); ]

我已经阅读了一些帖子,例如thisthis,但我没有得到有关我的问题的帮助。

我从我的片段中尝试过这个:

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

但是这显示出NullPointerException。

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

3 个答案:

答案 0 :(得分:1)

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

这样的事情
MainActivity mc = new MainActivity();

不是android希望你创建活动的方式...... 你需要像调用getActivity()一样获取活动;方法

答案 1 :(得分:1)

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

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

getActivity ().showDeviceListDialog ();

编辑(感谢user1506104的评论):

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

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

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

答案 2 :(得分:0)

您不能创建这样的活动:MainActivity mc = new MainActivity(); 。 Android负责此事。请改用Intent。 有关静态方法,请参阅本教程https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html