如何在 AsyncTask 类方法中更新列表的文本视图?

Posted

技术标签:

【中文标题】如何在 AsyncTask 类方法中更新列表的文本视图?【英文标题】:How to update textviews of list inside AsyncTask class method? 【发布时间】:2015-03-30 01:33:17 【问题描述】:

坚持这一点。 我有 FirstAsyncTask 更新数组 arr[] 我正在使用另一个 ImageAdapter 更新图像。详情请看代码 我想更新列表的每个文本视图。以下代码更新图像视图但不更新文本视图。我想用 arr[] 设置这个 textview 的文本,我在 中更新了 我在FirstAsyncTaskonPostExecute 中使用以下代码:

ListAdapter adapter = new SimpleAdapter(MainActivity.this, dataList,
                    R.layout.list_item, arr, new int[]  R.id.name,
                            R.id.email, R.id.mobile );

setListAdapter(Ladapter);

        //HOW TO UPDATE TEXTVIEW WITH ARRAY arr[]?????

        list=(ListView)findViewById(android.R.id.list);

        // Create custom adapter for listview
        adapter=new ImageAdapter(MainActivity.this, msStringS);//updater of images
        //Set adapter to listview
        list.setAdapter(adapter);

【问题讨论】:

谁能给我这个案例的CustomList适配器代码?请 【参考方案1】:

我们可以使用 runOnUiThread 概念更新 doInBackground() 中的 UserInterface。但这是不好的做法。正如山姆所说,请在 onPostExe 中更新用户接口,这将提供流畅的交互。

否则你可以使用runOnUiThread by

Sample.this.runOnThrea.. public void run() .在此处更新用户界面。

【讨论】:

你能给我用数组或数组列表更新textview的代码吗?在 run() 中被执行?? 你的意思是更新视图的整个代码。如果是这样,那么我怎么知道 textview 对象。【参考方案2】:

在AsyncTask类的postExecute方法中做

在 doInBackground() 之后,返回要填充列表的对象。

这将被传递给 onPostExecute() 并且您可以在那里初始化列表适配器。

private class LoadList extends AsyncTask<Void, Void, List<String>> 
        @Override protected List<String> doInBackground(Void... params) 
            ArrayList<String> listContents = new ArrayList<String>();

            listContents.add("Item one");
            listContents.add("Item two");
            listContents.add("Item three");

            return listContents;
        

        @Override protected void onPostExecute(List<String> listContents) 
            ListAdapter adapter = new SimpleAdapter(MainActivity.this, listContents,
                    R.layout.list_item, arr, new int[]  R.id.name,
                    R.id.email, R.id.mobile );

            mListView.setAdapter(adapter);
        
    

【讨论】:

它与我使用的代码相同。 setListAdapter() 没有设置我的文本视图。 setListAdapter 只有在扩展 ListActivity 或 ListFragment 时才有效。我修改了我的答案,试试看:mListView.setAdapter(adapter);

以上是关于如何在 AsyncTask 类方法中更新列表的文本视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AsyncTask 中更新 ArrayList 的内容?

在 Android 中,如何从 AsyncTask 更改 TextView? [复制]

在 Asynctask 的 onPostExecute() 方法中更改片段

从 Asynctask 更新 MainActivity 上的 ListView

AsyncTask ProgressBar 更新中的多线程概念 wait() 和 notify()

如何使用 AsyncTask 的 onPostExecute 方法更新 Android 中的变量