2011-05-16 45 views
1

我正在加載列表視圖,列出了手機上已安裝的所有應用程序。我希望應用程序在加載列表視圖時顯示不確定的進度條(旋轉的圓形)。ListView加載時無法顯示不確定的ProgressBar

 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> 

不顯示任何內容,而ListView控件加載....我究竟做錯了???

+0

如何加載數據?如何看起來空視圖? – pawelzieba 2011-05-16 21:10:01

+0

你調用lv的列表視圖,但它是XML中的滾動視圖?需要更多解釋 – Blundell 2011-05-16 21:12:11

+0

ListView不是ScrollView。所以,我對你的代碼有點困惑。 – 2011-05-16 21:16:05

回答

2

我想你需要異步加載數據:

  1. 在做初始設置只設置該活動的主要ListView和設置空視圖
  2. 寫一個AsyncTask(鏈接here)它會異步加載數據,並在您的適配器完成時填充您的適配器
  3. 在初始設置後啓動您的AsyncTask
  4. 執行任務期間,您的emp ty視圖(進度條)應該顯示,任務完成時,應該填充ListView
+0

感謝您的可能解決方案...你確定AsyncTask是實現這一目標的唯一方法嗎?我希望有一個更簡單的解決方案。 – 2011-05-16 22:54:35

+1

我的理論是你在UI線程中加載數據,所以它基本上鎖定了線程並禁止正確顯示進度條。所以是的,我認爲做到這一點的唯一方法是在單獨的線程上執行初始數據加載。 AsyncTask非常易於使用。你只需要重寫幾個方法來獲得工作實現。 – 2011-05-17 16:57:17

+0

如果從不同的線程填充listview的適配器,則適配器將拋出illegalstateexception,說不能從不同的線程加載數據。對? – Enigma 2013-08-12 11:19:14

相關問題