简体   繁体   English

从MainActivity调用新活动的方法

[英]Call method of new activity from MainActivity

There are two Activities.. 有两个活动。
1. Open SecondActivity from MainActivity 1.从MainActivity打开SecondActivity
2. When event comes into MainActivity, call testMethod of SecondActivity 2.当事件进入MainActivity时,调用SecondActivity的testMethod

But how to do call this testMethod? 但是如何调用此testMethod?

public class MainActivity extends Activity implements someListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Launch SecondActivity here!!
        Intent intent = new Intent();
        intent.setClass(MainActivity.this, SecondActivity.class);
        startActivityForResult(intent, ID_PlayerActivity);
    }

    //trigger by JNI, it's in the other thread, not main thread.
    void onEventCome() {
        //How to call testMethod() in SecondActivity?
    }
}

public class SecondActivity extends Activity {
    void testMethod() {
        //execute something...
    }
}

First you need an event aware listener that will capture such an event happening. 首先,您需要一个事件感知侦听器,该侦听器将捕获此类事件的发生。 Your class seems ill equipped to do so. 您的班级似乎没有能力这样做。

Since you have a valid question, here goes: 既然您有一个有效的问题,这里是:

void onEventCome() {
    SecondActivity secondActivity = new SecondActivity();
    secondActivity.testMethod();
}

There are many ways. 有很多方法。 For eg: Create the method as static and use class name and call it. 例如:创建静态方法,并使用类名并调用它。

public static void onEventCome() {

}

In MainActivity: 在MainActivity中:

MainActivity.onEventCome();

This is one method. 这是一种方法。 Another method is create an object for MainActivity. 另一种方法是为MainActivity创建一个对象。

public void onEventCome() {

}

MainActivity main; MainActivity主;

main = new MainActivity();
main.onEventCome();

If you open the SecondActivity, your MainActivity becomes inactive. 如果您打开SecondActivity,您的MainActivity将变为非活动状态。 I don't believe it is a good idea to call some activity method from other inactive/stopped activity. 我认为从其他非活动/已停止活动中调用某种活动方法不是一个好主意。

I suggest to use observer pattern . 我建议使用观察者模式 Create a global long-lived object like EventProducer and register all activities as observer. 创建一个像EventProducer这样的全局长期对象,并将所有活动注册为观察者。 So your EventProducer can inform all Activities about new event. 因此,您的EventProducer可以通知所有活动有关新事件的信息。

Example: 例:

public class SecondActivity extends Activity implements MyEventListener {

    @Override
    public void onResume(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventProducer.instance().register(this);
    }

    @Override
    public void onPause(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventProducer.instance().unregister(this);
    }

    void testMethod(){
        //just doit
    }

    @Override
    void onMyEventCome() {
        testMethod();
    }
}

You don't have a content view for your second activity. 您没有第二个活动的内容视图。 If you don't need to see the operation happen, you could remove your 如果您不需要查看该操作的发生,则可以删除您的

Intent intent = new Intent();
    intent.setClass(MainActivity.this, SecondActivity.class);
    startActivityForResult(intent, ID_PlayerActivity);

remove extends Activity in SecondActivity and add a constructor public SecondActivity(Context context) and invoke the test method from your first activity like @Dragan example: 删除SecondActivity中的extends Activity ,并添加一个构造函数public SecondActivity(Context context)并从您的第一个活动中调用测试方法,例如@Dragan示例:

void onEventCome() {
    SecondActivity secondActivity = new SecondActivity(MainActivity.this);
    secondActivity.testMethod();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM