我正在尝试将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()进行操作。