这是后台线程中调用的函数来更新前台:
private TextVIEw temp;private voID addClickableEvent(RevIEwHistoryEvent e){ if(e == null){ Log.e(tag,"Attempted to add a null event to revIEw history"); return; } TextVIEw t = new TextVIEw(getBaseContext()); t.setTag(e); t.setText(e.getTime()+" "+e.getEvent()); t.setClickable(true); t.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); t.setTextAppearance(getBaseContext(),R.style.information_RegularText); t.setGravity(Gravity.CENTER); t.setonClickListener(this); temp = t; runOnUiThread(new Runnable() { public voID run() { linearLayout display = (linearLayout) findVIEwByID(R.ID.revIEwHistory_display); display.addVIEw(temp); } });}
此功能成功运行一次,出现第一个textvIEw.但是,当它第二次被调用时,它会在display.addVIEw(temp)上失败;出现以下错误:
java.lang.IllegalStateException: The specifIEd child already has a parent. You must call removeVIEw() on the childs's parent first.
我不确定为什么我的textvIEw已经有一个父级,如果它被认为是新实例化的.此外,我使用临时textvIEw来绕过我的runnable无法引用本地textvIEw t.它是否正确?任何帮助,将不胜感激.
解决方法 不要使用成员变量(当然可以修改它而不是本地变量),而是使用最终的TextVIEw:final TextVIEw t = new TextVIEw(getBaseContext());// ...temp = t; // Remove thisrunOnUiThread(new Runnable() { public voID run() { // ... display.addVIEw(t); }});@H_404_2@ 总结
以上是内存溢出为你收集整理的android – 从后台线程添加视图全部内容,希望文章能够帮你解决android – 从后台线程添加视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)