亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從android中的另一個類調用MainActivity方法

從android中的另一個類調用MainActivity方法

眼眸繁星 2022-05-21 20:54:32
我正在開發一個安卓應用程序。我想將我的一些價值傳遞webview給我的 android 應用程序。我使用Passing data from java class to Web View html中給出的解決方案成功解決了這個問題。我面臨的問題是當我嘗試從 調用MainActivity方法時JavaScriptInterface.java,沒有調用這些方法或沒有給出錯誤。這是我到目前為止所嘗試的: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    }}
查看完整描述

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直接調用。


查看完整回答
反對 回復 2022-05-21
?
慕田峪7331174

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");

    }

}


}


查看完整回答
反對 回復 2022-05-21
  • 2 回答
  • 0 關注
  • 385 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號