【问题标题】:How to call Activity method from outside library in Android如何在Android中从外部库调用Activity方法
【发布时间】:2011-06-11 07:12:38
【问题描述】:

在我的主要活动中,我有一个需要从辅助 Java 类调用的方法。我使用辅助 java 类的构造函数来接收对主 Activity 的引用。然后,我尝试使用此引用从辅助 java 类的主体中调用该方法。但是java没有通过传递的引用识别那个方法?

我的主要活动如下:

public class MainActivity extends Activity{

    public void onCreate(){

        TestClass mTestClass = new TestClass(this);
    }

   public testMethod(){      
       // do some work here
   }
}

现在,在我的 TestClass.java 中,我收到了对 MainActivity 的引用:

public class TestClass{

    public TestClass(Activity mActivity){
        //Android/Java doesn't recoginze testMethod here???? 
        mActivity.testMethod();      
    }
}

我这几天一直在尝试解决这个问题,但没有成功。我迫切需要您的帮助,如果有任何建议,我将不胜感激!

附: TestClass 将充当一个库,每个人都可以从他们的 android 应用程序中调用它。换句话说,我提供 TestClass 作为库。然后,用户实现方法的内容,只要满足某些条件,就会执行该方法的内容。因此,我需要通过用户传递给我的库类的引用来调用该特定方法(将由用户在他们自己的 Activity 中定义)

【问题讨论】:

    标签: android android-activity call


    【解决方案1】:

    在您的应用程序中:

    public class MainActivity extends Activity implements Testeable {
    
        public void onCreate(){
    
            TestClass mTestClass = new TestClass(this);
        }
    
       public testMethod(){      
           // do some work here
       }
    }
    

    在您的图书馆中:

    public interface Testeable {
       public void testMethod();
    }
    
    
    public class TestClass{
    
        public TestClass(Testeable mActivity){
            //Android/Java doesn't recoginze testMethod here???? 
            mActivity.testMethod();      
        }
    }
    

    【讨论】:

    • 非常感谢。它工作得很好。在花了 2 天时间之后,你终于救了我。我没有足够的声望来投票给你,但只要我有足够的声望,我就会偷偷摸摸地为你投票。再次感谢
    【解决方案2】:

    如果您在 TestClass 的构造函数中传递 Activity 类,则 testMethod 将不可见,因为它包含在您的 MainActivity 类中而不是 Activity 中。所以改变

    public TestClass(Activity mActivity){
    ...
    

    public TestClass(MainActivity mActivity){
    ...
    

    或投 mActivity 或使用 Julio Gorgé 建议的界面

    【讨论】:

    • 感谢 Sponge,但正如我之前所说,我无法访问我的 TestClass 中的 MainActivity 的名称。我正在编写 TestClass 作为其他开发人员可以在他们的代码中使用的库类。所以,我不知道最终用户会调用他的类来在我的代码中使用它。接口解决方案似乎是迄今为止最好的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多