【问题标题】:How to call MainActivity method from non-Activity class?如何从非 Activity 类调用 MainActivity 方法?
【发布时间】:2017-08-15 05:33:54
【问题描述】:

我在非活动类中的运行时权限方法上遇到问题。我想调用一个公共的MainActivity 方法给一个助手类。

MainActivity.java方法:

public void a() {
    //some method
}

现在我的助手类:

Class B {
    private Context mContext;
    public B(Context context) {
        this.mContext = context;
        //now I am calling Mainactivity Method
        MainActivity mainActivity = new MainActivity();
        mainActivity.a(); 
    }
}

从 CActivity 调用 B 类:

onCreate() {
    B b = new B(this);
}

但它给了我一个运行时错误。

更新:

我的方法有一个运行时权限方法,它不是静态的。例如-requestPermissions(), onRequestPermissionsResult()。

【问题讨论】:

  • 粘贴你的错误(logcat)
  • 您可以使用界面。
  • 你不应该创建你的活动实例
  • 你能给我们这个构造的目标,并用更多语义含义的全名替换“B”和“a”,以便我们理解你为什么要让 B 调用 MainActivity.a?
  • 这是我之前的问题。我没有找到答案。我在那个问题中创建了一个单独的 Location 类。这个问题与之前的问题有关:stackoverflow.com/questions/45662822/…

标签: java android


【解决方案1】:

将该方法设为静态,这样您就可以在不创建类对象的情况下调用

例如

public static void testing() {}

现在打电话

MainActivity.testing();

【讨论】:

    【解决方案2】:

    我认为直接构建活动不是一个好主意。如果您想通知活动为您的助手类(B 类)执行某些任务,您最好使用implement interfaces 进行收听或简单地使用EventBus 库

    如果你真的想让你的方法工作,而不是在 B 类的构造函数中再次实例化 Activity,你可以将你的 Activity 作为参数传递给 B 类吗? (我不确定它会起作用)

    【讨论】:

      【解决方案3】:

      移除B类,直接在C活动中调用A活动的方法。

      用这样的 A 活动扩展你的 C 活动:

      public class C extends A{
      ...
      }
      

      然后在 C 活动中调用 A 活动的方法,如下所示:

      C.super.requestAppPermissions();
      

      希望对你有所帮助。

      【讨论】:

        【解决方案4】:

        您不能只输入B b = new B(this);,因为您正在实例化另一个类。

        改为使用getActivity() or getContext()。

        【讨论】:

          猜你喜欢
          • 2013-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-22
          • 2017-02-03
          • 2011-05-16
          相关资源
          最近更新 更多