Android:适用于ListActivity的线程

时间:2011-05-08 01:58:16

标签: android multithreading listview progressdialog

所以,我在这里使用onCreate方法来填充用户安装的应用程序ListView。这需要很长时间才能完成,我试图弄清楚在哪里制作一个新线程来完成一些繁重的工作,这样我就可以在列表加载时显示ProgressDialog。这是我的代码:

protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);

    // Find out which prefs to update
    Bundle extras = getIntent().getExtras();
    if(extras !=null){
        buttonPressed = extras.getString("buttonPressed");
        loadNumber = extras.getString("loads");
    } 

    buttonPressedAppName = buttonPressed + "AppName" + loadNumber;
    buttonPressedAppPack = buttonPressed + "AppPack" + loadNumber;
    humanNamePrefs = buttonPressed + "AppText" + loadNumber;

    // Get shared preferences
    settings = getSharedPreferences(PREFS_NAME, 0);

    // Do in another thread to not slow the UI down...eventually
    adapter = createAdapter();
    setListAdapter(adapter);
}

public ListAdapter createAdapter() {
    namesArray = new String[] { "Loading" };
    names = new ArrayList<String>();

    PackageManager pm = this.getPackageManager();
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    appList = pm.queryIntentActivities(mainIntent, 0);
    Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm));

    // Now, appList contains all of the ResolveInfo stuff

    for (int i = 0; i < appList.size(); i++) {          
        names.add(appList.get(i).loadLabel(pm).toString());
    }

    namesArray = maker(names);

    ListAdapter adapter = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_1, namesArray);
    setListAdapter(adapter);        
    return adapter;
}

我有一个线程处理列表的排序等等,但是ProgressDialog我甚至都没有出现,直到列表完全填充,这种方式违背了{{1}的目的}}。

我的问题简而言之,我应该把这个帖子用于显示列表正在填充的ProgressDialog?{/ p>

以下答案

@Femi在ProgressDialog上提供了一个很好的教程,在加载应用列表时我的AsyncTask旋转了。谢谢!

链接:http://labs.makemachine.net/2010/05/android-asynctask-example/

1 个答案:

答案 0 :(得分:0)

推荐的方法是使用AsyncTask:

  1. 显示进度对话框。
  2. 启动异步任务,并在names方法中构建doInBackground ArrayList。
  3. 将数组列表传递给createAdapter中的postExecute方法,然后关闭进度对话框。