1

我已经阅读了一堆帖子、文章和所有内容,但我无法找到解决方案..我制作了一个 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有没有办法启动第二个活动并在第一个活动的布局中更新一些值(在文本视图中)?不仅在加载时更新它,而且还有一个计时器,例如在第二个活动中,每5秒设置一次文本第一个活动布局中的文本视图..任何解决方案(无论是这个还是我在上面询问的方法)都将不胜感激

4

3 回答 3

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
于 2013-05-20T16:23:13.883 回答
0

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

您可以在启动第二个活动时在意图中传递实例化的界面对象。

于 2013-05-20T16:51:22.843 回答
0

我认为你的方法不好。你想先运行什么样的方法Activity?如果您Activity目前没有被用户使用,那么这样做有什么意义?

您应该做的是将您的操作定义为您onResume()的第一个方法的一部分,Activity并将它们放置在您要运行的方法中,然后将您的第二个Bundle或一个传递给第一个,以确定应该采取什么行动.ExtraActivity

于 2013-05-20T16:27:44.683 回答