Android - Как установить View.GONE вне потока пользовательского интерфейса? - PullRequest
1 голос
/ 16 сентября 2011

Я хочу, чтобы представление исчезало (чтобы его не было), когда пользователь нажимает кнопку.

Я могу сделать это внутри метода onCreate () (основной поток пользовательского интерфейса) с помощьюделать:

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

Однако я хочу иметь возможность делать то же самое в другом потоке (вне основного потока пользовательского интерфейса).Я попытался поместить вышеперечисленное в мою ветку, и это не сработало.

Заранее спасибо!

## EDIT ####

Чтобы сделать себя более понятным, я хочу сделать что-то вроде этого:

        @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 ]

4 голосов
/ 16 сентября 2011

есть аккуратный метод, называемый runOnUiThread

        runOnUiThread(new Runnable() {

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

edit: с вашим кодом

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);
            }
        });
}

});

2 голосов
/ 16 сентября 2011

Я бы предложил использовать View.post (Runnable), View.postDelayed (Runnable, long), Handler или AsyncTask, чтобы сделать это для вас.

Есть несколько хороших примеров того, как публиковать сообщения в ветке пользовательского интерфейса в этих сценариях:

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

1 голос
/ 16 сентября 2011

попробуйте

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

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

или создайте AsyncTask

1 голос
/ 16 сентября 2011

Я думаю, что одной из возможностей является передача ссылки на вашу деятельность в другой поток, чтобы ваш поток мог получить доступ к методу findViewById.

...