2013-02-14 3 views
0

Я хочу обновить текст TextView с помощью AsyncTask.Обновление ListView после завершения AsyncTask

У меня есть представление списка в том, что существует два TextView и один является ImageView

При нажатии кнопки пользователь нажмет ImageView песня будет воспроизводиться со стороны сервера. Поэтому я поставил код в AsyncTask задачи

Это пользовательский адаптер от я звоню ImageView на Click события ниже мой пример кода, как этот

 public View getView(final int position, View convertView, 
      ViewGroup parent) { 

    holder.imgPlay.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

и OnClick событие я передаю TextView в AsyncTask, что я хочу изменить после получения данных из интернета так ниже мой код

 new MetadataTask2().execute(holder.txtMetadata); 

Теперь код AsyncTask находится ниже

class MetadataTask2 extends AsyncTask<TextView, Void, IcyStreamMeta> { 
    TextView txtView; 

    @Override 
    protected IcyStreamMeta doInBackground(
      TextView... arg0) { 
        //SOME OPERATION 
     txtView = arg0[0]; 
     return streamMeta; 
    } 

    @Override 
    protected void onPostExecute(IcyStreamMeta result) { 
      txtView.setText("Hiiiiiiii"); 
     } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     try { 
      PD = ProgressDialog.show(CompaniesList.this, "Tuning...", 
        "Please Wait..."); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Теперь вы можете увидеть, что с textView.setText («Hiii») текст будет обновлен, но он не будет отображаться в Listview, так как я должен обновлять ListView или Adapter, но не знаю, как это сделать, поэтому я могу см текст на ListView любой орган может помочь мне

я использовал ниже код для обновления ListView, но до сих пор ничего не делает

 adapter.notifyDataSetChanged(); 
     mainListView.setAdapter(adapter); 
     mainListView.invalidate(); 
+0

Вы вызвали 'NotifyDataSetChanged()' на свой адаптер? –

+0

откуда я должен позвонить notifydatasetchanged ??? потому что asnyctask является полным процессом saperate ... –

ответ

1

есть адаптер быть переменной членом вашего класса активности. Затем вы сможете ссылаться на него из onPostExecute.

Кроме того, из вашего кода мне непонятно, действительно ли ваш TextView является тем, который вы намереваетесь изменить (тот, который вы надували предположительно) на всякий случай, помните, что вам нужно вызвать setContentView в основной теме до doInBackground пытается изменить любой компонент. Убедитесь, что эта переменная Textview (arg0 [0] ??) является той, которую вы накачаете

+0

из-за пользовательского адаптера не освежает :(я использовал следующий код adapter.notifyDataSetChanged(); mainListView.setAdapter (адаптер); mainListView.invalidate() –

+0

Я не понимаю, Вы использовали setContentView перед вызовом Asynctask? Как вам получить шляпу textview, которую вы хотите обновить? – quinestor

1

Вы должны реализовать свой собственный адаптер ListView, который предоставит данные в виде списка. Вызов notifyDataSetChanged() в PostExecute() от адаптера заставит просмотр списка получать данные от адаптера. Обновление видов просмотра списка прямо выглядит странно.

+0

из-за пользовательского адаптера это не освежает :(Я использовал следующий код adapter.notifyDataSetChanged(); \t \t \t \t mainListView.setAdapter (адаптер); \t \t \t \t mainListView.invalidate(); –

+0

у меня такая же проблема, 'ArrayList' файлов загружаю в переменный ustom 'GridView', где каждый элемент сетки содержит 2' ImageView 'и' TextView' ... обновление изображений при попытке удалить элемент, но 'TextView' не работает, только когда я нажимаю кнопку и возвращаюсь для перезагрузки страницы. У меня уже есть 'notifyDataSetChanged()' в моей 'onPostExecute()', но это не помогает. – Azurespot

Смежные вопросы