来自其他活动的Android调用方法

时间:2013-05-20 16:20:33

标签: android android-layout android-activity

我已经阅读了很多帖子,文章和一切,但我无法得到解决方案.. 我做了一个Android应用.. 我开始第一个活动(第一堂课)。然后我有第二个活动的按钮,我加载它像这样:

Intent i=new Intent(firstactivity.this,secondactivity.class);
startActivity(i);

在点击事件的第二个活动中,我希望从第一个活动中调用一个方法:

firstactivity f1= new firstactivity();
f1.MyMethod("my string goes here")

当我运行这个应用程序崩溃..我尝试了try catch exeption并且我打印到exeption,这是null的一个错误...我不能让它工作.....

提前感谢!

PS有没有办法在第一个活动的布局中启动第二个活动并更新一些值(在textview中)?不仅在加载时更新它,而且还有一个计时器,例如在第二个活动中,每5个秒settext到第一个活动布局中的textview ..任何解决方案(无论是这个还是上面提到的关于方法的内容)都将不胜感激

3 个答案:

答案 0 :(得分:1)

尝试使用意图在活动之间进行通信

通过onNewIntent:

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    handleIntent(intent);
}

private void handleIntent(Intent intent) {
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      if (query == null) {
          query = intent.getData().toString();
      }
      doMySearch(query);
    }
}

或使用听众。

class ActivityA implements Activity {

    // Nested 'listener'
    protected class TitleBarListener extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(NEW_TITLE_INTENT))
            {
                intent.getStringExtra(NEW_TITLE_TEXT_VALUE));
            }
        }
    }

    TitleBarListener mListener;

    // then create and register
    mListener = new TitleBarListener();
    registerReceiver(mListener, new IntentFilter(NEW_TITLE_INTENT));

确保将意图添加到android.xml

    <intent-filter>
    <action android:name="android.intent.action.SEARCH"/>
    <action android:name="com.mypackage.changeTitle"/> 
</intent-filter>

然后你应该能够向该活动广播/发送意图

   Intent i = new Intent(AccountMainView.NEW_TITLE_INTENT);
   getActivity().sendBroadcast(i);


   // or if you activity is singleTop and you're using the onNewIntent:
   Intent i=new Intent(this,MainActivity.class);
   i.putExtra("methodName","Mymethod");//goes to previous Intent
   startActivity(i);//will trigger only Mymethod in MainActivity

答案 1 :(得分:0)

我认为你的做法并不好。你想在第一个Activity中运行什么样的方法?如果您的Activity目前尚未被用户使用,那么这样做有什么意义?

您应该做的是将您的操作定义为第一个onResume()的{​​{1}}方法的一部分,然后放置您想要运行的方法,然后只需{{1}或者Activity从你的第二个Bundle到第一个{...}来确定应该采取什么行动。

答案 2 :(得分:0)

创建一个接口,在第一个活动中实现该接口,然后从第二个活动中调用instanciated方法。

您可以在启动第二个活动时在intent中传递实例化的接口对象。