从MainActivity调用新活动的方法

时间:2015-03-10 08:39:17

标签: java android android-activity

有两项活动..
1.从MainActivity打开SecondActivity
2.当事件进入MainActivity时,调用SecondActivity的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...
    }
}

4 个答案:

答案 0 :(得分:0)

首先,您需要一个能够捕获此类事件的事件感知侦听器。你的班级似乎没有能力这样做。

既然你有一个有效的问题,请点击这里:

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

答案 1 :(得分:0)

有很多方法。 例如: 将方法创建为static并使用类名称并调用它。

public static void onEventCome() {

}

在MainActivity中:

MainActivity.onEventCome();

这是一种方法。另一种方法是为MainActivity创建一个对象。

public void onEventCome() {

}

MainActivity main;

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

答案 2 :(得分:0)

如果您打开SecondActivity,您的MainActivity将变为非活动状态。我不认为从其他非活动/已停止活动中调用某些活动方法是个好主意。

我建议使用observer pattern。创建一个像EventProducer这样的全局长期存在的对象,并将所有活动注册为观察者。因此,您的EventProducer可以通知所有活动有关新事件。

示例:

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();
    }
}

答案 3 :(得分:0)

您没有第二项活动的内容视图。如果您不需要查看操作,可以删除

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

删除extends Activity中的SecondActivity并添加构造函数public SecondActivity(Context context)并调用第一个活动中的测试方法,例如@Dragan示例:

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