[英]Call MainActivity method from another class in android
我正在開發一個 android 應用程序。 我想將一些值從我的webview
傳遞給我的 android 應用程序。
我通過使用Passing data from java class to Web View html 中給出的解決方案成功解決了這個問題。
我面臨的問題是當我嘗試從JavaScriptInterface.java
調用MainActivity
方法時,這些方法沒有被調用或沒有給出錯誤。
這是我迄今為止嘗試過的:
MainActivity act=new MainActivity();
act.myMethod() //This method is available in my activity
但它沒有被調用。
和
((MainActivity)getActivity).myMethod();
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_main);
}
public void myMethod() {
Toast.makeText(this, "Inside MainActivity", Toast.LENGTH_SHORT).show();
}
}
//JavaScriptInterface class
class JavaScriptInterface {
Context mContext;
JavaScriptInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void onButtonClick(String toast1, String toast2) {
Toast.makeText(mContext, toast1+" | "+toast2, Toast.LENGTH_SHORT).show(); //THIS IS WORKING
MainActivity act=new MainActivity();
act.myMethod(); //NOT WORKING
}
}
從技術上講, 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
。
您正在創建 MainActivity 的另一個對象,這就是它沒有顯示的原因。 您正在將活動上下文傳遞給界面,以便您可以
((MainActivity)mContext).myMethod();
示例主活動
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");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.