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

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

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


但是,当我尝试将此视图添加到JavaScriptInterface类调用的函数中时,它将无法正常工作。我正在使用@JavaScriptInterface来获取Webview的页面源。简要地说,当网页加载到我的webview中时,我试图将新的textviews添加到布局中。

就像这样:

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

最佳答案

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

07-28 02:27
查看更多