这是我的第一个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(
<在我的方法上强> 此 );
] 。
我已经阅读了一些帖子,例如this和this,但我没有得到有关我的问题的帮助。
我从我的片段中尝试过这个:
MainActivity mc = new MainActivity();
mc.showDeviceListDialog();
但是这显示出NullPointerException。
所以,请告诉我如何在没有这个错误的情况下从我的片段中调用它。 谢谢。
答案 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。