2013-02-14 73 views
0

我想用的AsyncTask更新的TextView的文本。ListView控件更新完成后的AsyncTask

我在列表视图中有两个TextView的,一个是ImageView的

当用户按下按钮的ImageView宋会从服务器端进行播放。所以,我已经把代码中的AsyncTask任务

这是从我呼吁Click事件的ImageView下面是我这样的

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

现在,这里u能看到,随着textView.setText(“HIII”)的文本将被更新,但它不会在列表视图反映,我需要更新的ListView或适配器,但不知道怎么做,这样我就可以见列表视图文本任何机构可以帮助我

我用下面的代码更新列表视图,但仍无助

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

你打电话'NotifyDataSetChanged()'您的适配器? – 2013-02-14 07:37:22

+0

从哪里我必须调用notifydatasetchanged ???因为asnyctask完成saperate过程... – 2013-02-14 07:40:13

回答

1

让你的适配器是你的活动类的成员变量。然后你将能够从onPostExecute引用它。

此外,从你的代码,如果你的TextView是actuallly你打算修改以防万一(那你大概膨胀的),请记住,你要调用的setContentView在主线程一个是我不清楚在之前doInBackground尝试修改任何组件。确保这个Textview变量(arg0 [0] ??)是你正在膨胀的变量

+0

因为定制适配器是不爽快:(我用下面的代码adapter.notifyDataSetChanged(); mainListView.setAdapter(适配器); mainListView.invalidate() – 2013-02-14 10:11:05

+0

我不明白, ???你解决这个问题你有没有使用的setContentView调用的AsyncTask如何你TextView的帽子要更新之前 – quinestor 2013-02-14 12:37:27

1

你应该实现你自己的ListView将提供数据到列表视图的适配器。从适配器调用notifyDataSetChanged()PostExecute()将强制列表视图从适配器中获取数据。更新列表视图直接看起来很奇怪。

+0

因为定制适配器是不爽快:(我用下面的代码adapter.notifyDataSetChanged(); \t \t \t \t mainListView.setAdapter(适配器); \t \t \t \t mainListView.invalidate(); – 2013-02-14 10:08:56

+0

我有同样的问题,文件的'ArrayList'予加载到交流ustom'GridView'其中每个网格项目包含2个'ImageView'和一个'TextView' ...当我尝试删除一个项目时图像更新,但是'TextView'没有,只有当我回击按钮并返回时重新加载页面。我已在'onPostExecute()'中有'notifyDataSetChanged()',但这没有帮助。 – Azurespot 2015-04-28 23:32:31