Технически, будет вызван myMethod
, но поскольку вы сами создаете MainActivity, он ни к чему не привязан.
Как правило, вы не должны создавать новый экземпляр MainActivity таким образом. Чтобы открыть новый MainActivity, вы используете Intent.
В вашем случае вы должны иметь ссылку на исходный экземпляр MainActivity и вызывать этот метод там. Не создавайте новый каким-либо образом, так как он уже запущен.
Простой способ решить:
MainActivity.this.myMethod("Hello there")
Вам не нужно хранить mContext
. Вы уже находитесь в MainActivity.
Итак, полный код будет:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = findViewById(R.id.webview);
myWebView.loadUrl("http://www.google.com");
myWebView.addJavascriptInterface(new WebAppInterface(), "Android");
}
public void myMethod(String test){
Toast.makeText(this, test, Toast.LENGTH_SHORT).show();
}
public class WebAppInterface {
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
MainActivity.this.myMethod("Hello there");
}
}
}
На самом деле, я думаю, что вы даже можете избежать MainActivity.this.
и позвонить myMethod
напрямую.