Вопрос

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

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.gridview);
            new LoadAllPictures().execute();
            GridView g = (GridView) findViewById(R.id.gridview);
            g.setAdapter(new ImageAdapter(this));
}

Таким образом, в конце концов логат показывает, что все было доказано, но ничего на моем экране. Я попытался сделать сенадаптерную часть в мою асинктюзке, но это говорит мне, что: Only the original thread that created a view hierarchy can touch its views.

Что я должен делать ?

Это было полезно?

Решение

AsyncTask Имеет полезный метод, который вы можете реализовать с именем onPostExecute(). Отказ Это называется из исходной нити UI после завершения задачи. Вы можете использовать его, чтобы установить адаптер из правильного потока.

Другие советы

У Asynctask есть 3 основных метода:

protected void onPreExecute()
{
}

protected void onPostExecute(Void unused)   
{
  // displaying images
  // set adapter for listview with downloaded items
}

protected Void doInBackground(Void... params) 
{
     // downloading and time consuming task 
}

так что вы можете написать g.setAdapter(new ImageAdapter(this)); внутри onPostExecute(Void unused) метод, потому что в это время картинки уже загружены внутри doInBackground() метод.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top