【问题标题】:Is there a solution that access MainActivity from other Activity class?是否有从其他 Activity 类访问 MainActivity 的解决方案?
【发布时间】:2019-11-07 07:44:27
【问题描述】:

我想调用下面的函数。

mobileView.loadUrl("javascript:setUserId () ");

而且 mobileView 在 MainActivity 中。

public class MainActivity extends AppCompatActivity {
    private WebView mobileView;
}

我想在 SecondActivity 完成后调用上面的函数。

public class SecondActivity extends AppCompatActivity {
    ...
    private void getUserId () {
        ...
        finish();
    }
}

而 SecondActivity 从 AReceiver 开始。

public class AReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        ...
        Intent i = new Intent(context, SecondActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ...
        context.startActivity(i);
    }
}

下面的代码调用了 AReceiver...

class MainActivity {
    ...
    private void userId () {
        ...
        intent = new Intent(MainActivity.this, AReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(
                MainActivity.this, 
                alarmID, 
                intent, 
                PendingIntent.FLAG_UPDATE_CURRENT
        );
        alarmManager.set(
                AlarmManager.RTC_WAKEUP, 
                mCalendar.getTimeInMillis(), 
                pendingIntent
        );
        ...
    }
    ...
}

但我不知道如何从 SecondActivity 访问 mobileView。 有什么解决办法吗?


我尝试过的...

  1. 更改变量
private webView mobileView 

public webView mobileView

2。 从 SecondActivity 调用使用

MainActivity.mobileView

这对我不起作用。

【问题讨论】:

  • 你是从 MainActivity 启动 SecondActivity
  • 不,我从另一个接收器开始 SecondActivity 扩展 BroadcastReceiver .....
  • 然后您可以使用本地广播管理器或事件总线并传递所需的数据和信息并执行所需的方法。签出此stackoverflow.com/questions/8802157/…
  • 谢谢!希望你有一个美好的一天:D

标签: java android


【解决方案1】:

你可以试试这个选项

意图

.......

您使用 startActivityForResult 从另一个活动中打开了新活动。在这种情况下,您只需从代码中调用 finishActivity() 函数,它就会带您回到上一个活动。

仅当您从主要活动开始第二个活动时才有效

【讨论】:

  • 但是 SecondActivity 不是来自 MainActivity。所以我不能使用你的解决方案。这是我的错,因为我描述的情况不够多……谢谢你回答我。 :)
【解决方案2】:

我使用本地广播管理器解决了这个问题! :D 感谢@Shripad Jadhav 帮助回答这个问题。

下面的描述是解决方案!希望它可以帮助某人。 :D


MainActivity.java

public class MainActivity extends AppCompatActivity {
    private WebView wv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        LocalBroadcastManager.getInstance(this)
            .registerReceiver(mBroadcastReceiver, new IntentFilter("webview-filter"));
        ...
    }
    ...
    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            mv.loadUrl("javascript: loadMainData ()");
        }
    };
    @Override
    protected void onDestroy() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mBroadcastReceiver);
        super.onDestroy();
    }
}

SecondActivity.java

public class SecondActivity extends AppCompatActivity {
    private void someFunction () {
        sendMessage ();
    }
    ...
    private void sendMessage() {
        Log.d("sender", "Broadcasting message");
        Intent intent = new Intent("webview-filter");

        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }
    ...
}

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 2014-03-22
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多