Android 完成异步任务后更新ListView
我想使用AsyncTask更新TextView的文本 我有列表视图,其中有两个TextView和一个ImageView 当用户按下ImageView按钮时,将从服务器端播放歌曲。所以我在AsyncTask中加入了代码 这是一个自定义适配器,我从中调用ImageView的点击事件,下面是我的代码示例Android 完成异步任务后更新ListView,android,android-asynctask,android-view,Android,Android Asynctask,Android View,我想使用AsyncTask更新TextView的文本 我有列表视图,其中有两个TextView和一个ImageView 当用户按下ImageView按钮时,将从服务器端播放歌曲。所以我在AsyncTask中加入了代码 这是一个自定义适配器,我从中调用ImageView的点击事件,下面是我的代码示例 public View getView(final int position, View convertView, ViewGroup parent) {
public View getView(final int position, View convertView,
ViewGroup parent) {
holder.imgPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
我在asynctask中传递textview的onclick事件,我想在从internet获取数据后更改它,下面是我的代码
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();
}
}
}
让适配器成为活动类的成员变量。然后您将能够从onPostExecute引用它
此外,从您的代码中,我不清楚您的TextView是否实际是您打算修改的(您可能夸大了的那个),请记住,在doInBackground尝试修改任何组件之前,您必须在主线程中调用setContentView。确保此Textview变量(arg0[0]??)是您正在膨胀的变量您应该实现自己的
ListView
适配器,该适配器将向列表视图提供数据。从适配器调用PostExecute()
中的notifyDataSetChanged()
,将强制列表视图从适配器获取数据。直接更新列表视图看起来很奇怪。您是否在适配器上调用了NotifyDataSetChanged()
?我必须从哪里调用NotifyDataSetChanged???由于asnyctask是完整的saperate进程…由于自定义适配器,它不会刷新:(我使用了以下代码适配器。notifyDataSetChanged();mainListView.setAdapter(适配器);mainListView.invalidate();我也有同样的问题,我加载到一个自定义的GridView
文件的ArrayList
,其中每个网格项目包含2个ImageView
和一个TextView
…当我试图删除一个项目时,图像会更新,但是TextView
不会更新,只有当我点击后退按钮并返回重新加载页面时才会更新。我已经有了venotifyDataSetChanged()
在我的onPostExecute()
中,但这没有帮助。由于自定义适配器,它没有刷新:(我使用了以下代码适配器。notifyDataSetChanged();mainListView.setAdapter(适配器);mainListView.invalidate()我不明白,你解决了吗?在调用Asynctask之前使用过setContentView吗?如何获取要更新的textview?
adapter.notifyDataSetChanged();
mainListView.setAdapter(adapter);
mainListView.invalidate();