簡體   English   中英

android-從AsyncTask doInBackground()線程更新ListView

[英]android - Update ListView from AsyncTask doInBackground() thread

我有一個線程在進行一些圖像處理,效果很好,但是在整個執行過程中,我希望它定期將字符串發送到ListView,以更新進度信息,我正在使用publishProgress()顯示字符串,但是我可以為了使其能夠動態更新,僅在后台任務完成后才顯示所有內容。

后台線程:

@Override
protected void onProgressUpdate(String... values) {
    super.onProgressUpdate(values);
    String message = "";
        for (String str : values) {
    message = str;
    }
    publishProgress.addItem(message); // Calls method in publishProgress.class with the update string.
}

publishProgress類:

// Imports
public class publishProgress extends Activity 
{
public static ArrayAdapter<String> ad;
public static ArrayList <String> updates = new ArrayList <String>();
public static ListView list;
}
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.activity_publishProgress);

    ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, updates);
    list = (ListView)findViewById(R.id.listView1);
    list.setAdapter(ad);
}

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public static void addItem(String text) {
    updates.add(text);
    ad.notifyDataSetChanged();
}

問題是調用ad.NotifyDataSetChanged();時出現nullPointerException。

我沒有太多的Android經驗,所以如果有人對如何在不凍結GUI的情況下將字符串動態添加到ListView有任何想法,將不勝感激。

  • 如果有人找到解決方案,您可以嘗試解釋一下,以便下次可以理解,謝謝!

doInBackgroud()函數上執行依賴於網絡調用的操作,所有依賴於UI的函數都在onPostExecute()函數上實現它們,因為在這里您將返回到UI線程。 因此,將notifyDataSetChanged()調用到onPostExecute()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM