Android - 如何在UI线程外设置View.GONE?

时间:2011-09-15 20:24:05

标签: android view visibility ui-thread

当用户按下按钮时,我想让视图消失(即将消失)。

我可以通过执行以下操作在 onCreate()方法(主UI线程)中创建:

findViewById(R.id.llLoadingGallery).setVisibility(View.GONE);

但是,我希望能够在另一个线程(在主UI线程之外)中执行相同的操作。我试着将上面的内容放在我的帖子中,但它没有用。

提前谢谢!

##编辑####

为了让自己更清楚,我想做这样的事情:

        @Override
    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.teste_aba_3);

    botao_tab_musica.setOnClickListener( new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            ...
        findViewById(R.id.llLoadingGallery).setVisibility(View.GONE);
        }
    });

}

然而,这不起作用!我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

这是一个名为runOnUiThread

的简洁方法
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                findViewById(R.id.llLoadingGallery).setVisibility(View.GONE);
            }
        });

编辑:使用您的代码

botao_tab_musica.setOnClickListener( new View.OnClickListener() {

@Override
public void onClick(View v) {

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                findViewById(R.id.llLoadingGallery).setVisibility(View.GONE);
            }
        });
}

});

答案 1 :(得分:2)

我建议使用View.post(Runnable),View.postDelayed(Runnable,long),Handler或AsyncTask为您执行此操作。

在这些场景中,如何发布到UI线程有一些很好的例子:

http://developer.android.com/resources/articles/painless-threading.html

答案 2 :(得分:1)

我认为一种可能性是将对您的活动的引用传递给另一个线程,以便您的线程可以访问findViewById方法。

答案 3 :(得分:1)

试试这个

findViewById(R.id.llLoadingGallery).post(new Runnable()
        {

            @Override
            public void run()
            {
               findViewById(R.id.llLoadingGallery).setVisibility(View.GONE);
            }
        });

或创建AsyncTask