Не удается получить Indeterminate ProgressBar для отображения во время загрузки ListView

1

Я загружаю список, в котором перечислены все установленные приложения на телефоне. Я хочу, чтобы приложение отображало неопределенный индикатор прогресса (вращающийся круговой), пока загружается список.

     final PackageManager pm = this.getPackageManager();

    Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    final ArrayList<ResolveInfo> list =
            (ArrayList<ResolveInfo>) pm.queryIntentActivities(intent, 
                    PackageManager.PERMISSION_GRANTED);
    for (ResolveInfo rInfo : list)
    {
        Log.i(TAG, ": Installed Applications " + rInfo.activityInfo.
                applicationInfo.loadLabel(pm).toString());
    }

    final ArrayAdapter<ResolveInfo> adapter = 
        new ArrayAdapter<ResolveInfo>(this, R.layout.list_item, list)
        {
        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            if (convertView == null)
                convertView = LayoutInflater.from(parent.getContext()).
                    inflate(R.layout.list_item, parent, false);

            final String text = list.get(position).activityInfo.
                applicationInfo.loadLabel(pm).toString();
            ((TextView)convertView.findViewById(R.id.text)).setText(text);

            final Drawable drawable = list.get(position).activityInfo.applicationInfo.loadIcon(pm);
            ((ImageView)convertView.findViewById(R.id.image)).setImageDrawable(drawable);

            return convertView;
        }

        };
    setListAdapter(adapter);

    ListView lv = getListView();
    lv.setEmptyView(findViewById(R.id.empty));
    lv.setTextFilterEnabled(true);

Вот XML:

<?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView android:id="@+id/image" 
        android:layout_width="50dp" android:layout_height="50dp" />
    <TextView android:id="@+id/text"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:padding="10dp" android:textSize="16sp" />

 <ScrollView
            android:id="@+id/empty" android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <ProgressBar android:id="@+id/progressBar1" android:layout_width="wrap_content" 
            android:layout_height="wrap_content"></ProgressBar>

        </ScrollView>

 </LinearLayout>

Во время загрузки списка ничего не отображается.... что я делаю неправильно???

  • 0
    Как вы загружаете данные? Как выглядит пустой вид?
  • 0
    Вы называете lv представлением списка, но это прокрутка в XML? Требуется больше объяснений
Показать ещё 2 комментария
Теги:

1 ответ

2

Мне кажется, вам нужно загружать данные асинхронно:

  • При выполнении начальной настройки установите основной список ListView для активности и установите пустой вид
  • Напишите AsyncTask (ссылка здесь), которая загружает ваши данные асинхронно и заполняет ваш адаптер, когда он завершает
  • запустите свою AsyncTask после начальной настройки
  • Во время выполнения задачи должно отображаться пустое представление (индикатор выполнения), и когда задача завершается, ListView должен быть заполнен
  • 0
    Спасибо за ваше возможное решение ... Вы уверены, что AsyncTask - единственный способ добиться этого? Я надеялся, что может быть более простое решение.
  • 1
    Моя теория заключается в том, что вы загружаете данные в поток пользовательского интерфейса, поэтому он по сути блокирует поток и не позволяет правильно отображать индикатор выполнения. Так что да, я думаю, что единственный способ сделать это - выполнить начальную загрузку данных в отдельном потоке. AsyncTask очень прост в использовании. Вам нужно только переопределить несколько методов, чтобы получить работающую реализацию.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню