2 回答

TA貢獻1788條經驗 獲得超4個贊
從技術上講,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直接調用。

TA貢獻1828條經驗 獲得超13個贊
您正在創建 MainActivity 的另一個對象,這就是它沒有顯示的原因。您正在將活動上下文傳遞給界面,因此您可以
((MainActivity)mContext).myMethod();
示例 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(this), "Android");
}
public void myMethod(String test){
Toast.makeText(this, test, Toast.LENGTH_SHORT).show();
}
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
((MainActivity)mContext).myMethod("hello");
}
}
}
添加回答
舉報