在JavaScriptInterface类中调用AddView

时间:2013-12-30 21:42:36

标签: javascript android

我正在尝试动态地将textview添加到线性布局中。但是有一个问题。

在我的按钮中,此代码非常有效:

TextView ASDF = (TextView) getLayoutInflater().inflate(R.layout.note_date, null);
ASDF.setText("TEST");
HomeContainer.addView(ASDF);

但是当我尝试在JavaScriptInterface类调用的函数中添加此视图时,它不起作用。我正在使用@JavaScriptInterface来获取我的webview的页面源代码。简而言之,我正在尝试在我的网页视图中加载网页时为我的布局添加新的文本视图。

所以它就像:

public class WebAppInterface
{
     Context mContext;
     WebAppInterface(Context c) {mContext = c;}

     @JavascriptInterface
     public void GetHTML(String html)
     {
         ...
         ...
         TextView ASDF = (TextView) getLayoutInflater().inflate(R.layout.note_date, null);
         ASDF.setText("TEST");
         HomeContainer.addView(ASDF);
     }
}

当我检查时,我看到webview的源是正确的,并且inflate()也没有返回ASDF,我认为问题是关于addView。

我该如何解决这个问题?

修改 尝试过这个,没有用:

TextView ASDF = (TextView) getLayoutInflater().from(this.getParent()).inflate(R.layout.note_nick, null);
ASDF.setText("TEST");
((MainActivity)this.getParent()).HomeContainer.addView(ASDF);

编辑:

解决,感谢@SimonSays,这将解决您的问题:

        runOnUiThread(new Runnable()
        {
            public void run()
            {
                TextView ASDF = (TextView) getLayoutInflater().inflate(R.layout.note_date, null);
                ASDF.setText("TEST");
                HomeContainer.addView(ASDF);
            }
        });

1 个答案:

答案 0 :(得分:2)

我的猜测是JavaScript方法没有在UI线程中执行。只有这个线程可以修改UI。您可以使用Activity.runOnUiThread()View.post()来执行此操作。