从android中的另一个类调用MainActivity方法

我正在开发一个安卓应用程序。我想将我的一些价值传递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

    }

}


眼眸繁星
浏览 395回答 2
2回答

尚方宝剑之说

从技术上讲,myMethod会调用,但由于您自己创建 MainActivity,它不附加到任何东西。通常,您不应该以这种方式创建新的 MainActivity 实例。要打开一个新的 MainActivity,请使用 Intent。在您的情况下,您应该引用原始 MainActivity 实例,并在那里调用此方法。不要以任何方式创建新的,因为您已经在运行它。一个简单的解决方法:MainActivity.this.myMethod("Hello there")您不必存储mContext. 你已经在 MainActivity 里面了。因此,完整的代码将是:public class MainActivity extends AppCompatActivity {@Overrideprotected 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直接调用。

慕田峪7331174

您正在创建 MainActivity 的另一个对象,这就是它没有显示的原因。您正在将活动上下文传递给界面,因此您可以((MainActivity)mContext).myMethod();示例 MainActivitypublic class MainActivity extends AppCompatActivity {@Overrideprotected 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");    }}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java