当前位置: 首页 > 知识库问答 >
问题:

尝试从线程[重复]启动动画时调用了FromErrorThreadException

董庆
2023-03-14

我想从列表中删除一个对象,同时我想为用户制作一个淡出动画。。。

删除函数创建一个Thread,在线程中我尝试启动动画,但我得到了那个Excure:

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that      created a view hierarchy can touch its views.

关于活动:

private Animation animation;
private AnimationListener al;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    animation = AnimationUtils.loadAnimation(this, R.anim.fade_out);                
    al = new AnimationListener() {

        public void onAnimationStart(Animation animation) {
        // do nothing       
        }

        public void onAnimationRepeat(Animation animation) {
        // do nothing       
        }

        public void onAnimationEnd(Animation animation) {
            TableRow tr = (TableRow) findViewById(R.id.test);                   
            tr.setVisibility(View.GONE);
        }

    };

    animation.setAnimationListener(al);                             
    animation.reset();            
}

当用户按下删除图标时,他将到达这里:

public void remove(View v) {         
    RemoveF rf = new RemoveF();
    rf.start();
}

我的踏板从这里开始:

class RemoveF extends Thread {
    private boolean running;

    public void run() {
        running = true;
        try {
            do {
                //business logic goes here
                TableRow tr = (TableRow) findViewById(R.id.test);
                tr.setAnimation(animation);
                tr.startAnimation(animation);
                stopRunning();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ie) {
                    // do nothing
                }
            } while (running);
        } catch (Exception e) {
            Log.e("RemoveF", "Exception", e);
        }
    }

    public void stopRunning() {
        running = false;
    } 
}

知道我该怎么做吗?谢谢

共有1个答案

仲孙奇
2023-03-14

此处TableRow tr=(TableRow)findViewById(R.id.test)

您正在尝试从另一个线程访问UI元素

使用runOnUiThreadHandler从线程更新UI

 类似资料:
  • 当我运行应用程序时,它工作得很好,但是当我想调试一个变量值时,应用程序就崩溃了。下面是完整的调试日志。我不知道是什么错误来纠正它。你们能帮帮我吗?我读到了一些关于并且我禁用和启用了ADB集成,但没有帮助我。我试图清洁,重建和运行的项目再次和没有帮助我。每次我尝试开始调试时,应用程序都会崩溃。 提前谢谢!!

  • 当用户触摸AlertDialog中的OK按钮时,我一直试图让我的应用程序返回到主活动。 我显示的警报对话框基本上是一条错误消息,用于通知用户没有找到他们选择并在不是主要活动的活动中调用的特定日期的数据,但我希望他们在单击确定时将其发送回主要活动。 调用运行良好,只是它似乎不知道如何找到主要活动,即使我使用的调用在任何正常活动中都有效。 我得到的错误是: 特定AlertDialog代码为:

  • 问题内容: 当设备在android上启动时,我一直在尝试启动服务,但无法正常工作。我已经看了许多在线链接,但是这些代码都不起作用。我忘记了什么吗? 广播接收器 问题答案: 作为附加信息:BOOT_COMPLETE在挂载外部存储之前发送到应用程序。因此,如果将应用程序安装到外部存储,它将不会收到BOOT_COMPLETE广播消息。

  • 我尝试使用< code>minikube start启动minikube,但出现以下错误: charlie@charlie:~$minikube start本地库伯内特斯v1.10.0集群…启动VM… E0705 00:39:35.199099 20888start.go:168]启动主机时出错:创建主机时出错:执行步骤出错:运行预先检查。:我们从版本5开始支持Virtualbox。您的Virtu

  • 可能重复: Java等待并通知:IllegalMonitorStateException 有什么问题 投掷:

  • 问题内容: 我正在使用CSS着色器+动画。我的着色器类定义如下: 我正在尝试使用jQuery通过和动态设置/取消设置样式(shader + animation) 但是,奇怪的是,当我重置类时(例如,在removeClass之后调用addClass),仅重新应用了着色器,而没有应用动画(我已钩住AnimationStart事件以查看动画何时开始)。有人知道为什么会这样吗,我该如何解决? 编辑:我在这