繁体   English   中英

Android - 使用Async更新UI

[英]Android - Using Async to update UI

我对如何使用Async感到困惑。 我希望它在单击按钮时立即更新UI,而不必杀死活动并重新实例化它。 在后台,我希望它等待点击更新UI,点击后我想让它确定是否点击了正确的按钮。 我正在使用布尔值isUserRight(); 确定答案是否正确,之后我使用resetButtons(); 重置按钮(显然)然后重置setButtons(); 更改按钮。 我把这些方法全部写出来了,我只是不知道如何将它们实现为Async。 我需要立即更新UI以更改按钮的颜色。 我不需要任何方法,按钮颜色等方面的帮助,只需要Async,我也不是要求任何人用勺子给我,只是给我一点推动去哪里。 任何帮助都会很好,谢谢你们!

TL; DR需要在使用异步按下按钮后更新UI,因此按钮颜色不会卡住,我不必重新启动活动来更新UI。 我不需要整个代码,只需要指导一下去哪里。

编辑:添加了一些代码。

这是在我的onCreate();

buttons[0] = (Button)findViewById(R.id.b0);
    buttons[1] = (Button)findViewById(R.id.b1);
    buttons[2] = (Button)findViewById(R.id.b2);
    buttons[3] = (Button)findViewById(R.id.b3);
    buttons[0].setOnClickListener(this);
    buttons[1].setOnClickListener(this);
    buttons[2].setOnClickListener(this);
    buttons[3].setOnClickListener(this);

然后在我的onClick下,我有一个按钮的开关,所有这些都转到这个方法:

    public boolean isUserRight() {
        if(correct == 1) {
              onButton();
            return true;
            //Toast.makeText(getApplicationContext(), "Good job!", Toast.LENGTH_SHORT).show();
            //buttons[test].getBackground().setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY);
        }
        onButton();
        return false;
    }


    public void onButton() {
        int rnd = new Random().nextInt(buttons.length);
        test = rnd;
        buttons[rnd].getBackground().setColorFilter(Color.YELLOW, PorterDuff.Mode.MULTIPLY);
        //ResetButtons();
    }

这很好用,唯一的问题是在点击第一个按钮后,颜色停止变化并得到更新。

void test(){
    final Handler mHandler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            if(msg.what == 0){
                // update your ui

            }

        }

    };

    new Thread(new Runnable() {
        public void run() {
            // do network job
            // do something you want here
            mHandler.sendEmptyMessage(0);
        }
    }).start();

}

好吧,我修好了。 感谢您的帮助,对于任何想知道我是如何修复它的人,我使用的是view.invalidate,它没有针对任何东西,所以我不得不将它更改为按钮数组ex:

键[1] .invalidate(); 这将刷新按钮而不是整个活动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM