Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 完成异步任务后更新ListView_Android_Android Asynctask_Android View - Fatal编程技术网

Android 完成异步任务后更新ListView

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) {

我想使用AsyncTask更新TextView的文本

我有列表视图,其中有两个TextView和一个ImageView

当用户按下ImageView按钮时,将从服务器端播放歌曲。所以我在AsyncTask中加入了代码

这是一个自定义适配器,我从中调用ImageView的点击事件,下面是我的代码示例

     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
不会更新,只有当我点击后退按钮并返回重新加载页面时才会更新。我已经有了ve
notifyDataSetChanged()
在我的
onPostExecute()
中,但这没有帮助。由于自定义适配器,它没有刷新:(我使用了以下代码适配器。notifyDataSetChanged();mainListView.setAdapter(适配器);mainListView.invalidate()我不明白,你解决了吗?在调用Asynctask之前使用过setContentView吗?如何获取要更新的textview?
      adapter.notifyDataSetChanged(); 
      mainListView.setAdapter(adapter); 
      mainListView.invalidate();