android – 从后台线程添加视图

android – 从后台线程添加视图,第1张

概述我正在尝试将多个textview添加到已经膨胀的布局中.显示的信息将从数据库中提取,并为数据库中的每一行创建一个textview.由于数据库可能非常大,我在后台线程中一次创建一个textview,并将其添加到前台. 这是后台线程中调用的函数来更新前台: private TextView temp;private void addClickableEvent(ReviewHistoryEvent @H_404_2@ 我正在尝试将多个textvIEw添加到已经膨胀的布局中.显示的信息将从数据库中提取,并为数据库中的每一行创建一个textvIEw.由于数据库可能非常大,我在后台线程中一次创建一个textvIEw,并将其添加到前台.

这是后台线程中调用的函数来更新前台:

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 – 从后台线程添加视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1127358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存