【问题标题】:Use "this" in static method in android [duplicate]在android的静态方法中使用“this”[重复]
【发布时间】:2016-10-06 07:46:12
【问题描述】:

这是我的第一个 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。但是当我把它 Static 我在“this[ dialog.setOnDeviceSelectedListener( 上遇到错误这个);]关于我的方法。

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

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

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

但这显示的是 NullPointerException。

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

【问题讨论】:

  • 您可以使用接口作为活动的回调。永远不要MainActivity mc = new MainActivity();
  • 你不能实例化你的活动
  • 您不能将thisstatic 一起使用。您也不应该在扩展 Activity 的类上使用 new
  • @Blackbelt 显然你可以做到,但这并不意味着你应该这样做
  • 伙计们,这不是重复的。尽管问题似乎与 static 方法的用法有关,但他提出的解决方案实际上并不涉及创建静态方法。这是从 Fragment 访问活动的问题。

标签: java android


【解决方案1】:

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

因此,您可以从 Fragment 调用此方法,而无需将其设为 static

getActivity ().showDeviceListDialog ();

编辑(感谢 user1506104 的评论):

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

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

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

【讨论】:

  • 这应该可以工作,因为所讨论的片段是具有showDeviceListDialog() 的 Activity 的子级。
  • 感谢您的回答@Eran。它刚刚奏效! XD
【解决方案2】:

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

MainActivity mc = new MainActivity();

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

【讨论】:

  • 感谢您的评论
  • 并没有真正解决初始问题的解决方案,即调用活动方法。 OP 只是允许 IDE 将方法设为静态
【解决方案3】:

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

【讨论】:

  • 我们不应该在答案部分包含 URL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2011-01-03
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多