2013-07-15 61 views
0

我使用http://developer.android.com/guide/topics/ui/layout/listview.html作爲參考。 我想在ListView使用一個不確定的進度條,當我使用:使用帶有列表視圖的不確定進度欄

ProgressBar pb=new ProgressBar(this); 

由於Android的ListView培訓指導建議,我嘗試:

pb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT, Gravity.CENTER)); 

Eclipse中說,這是一個非法的構造的LayoutParams。

此外,

pb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT); 
    pb.setGravity(Gravity.CENTER); 

被認爲是非法...

我也曾嘗試:

list_book.setEmptyView(inflater.inflate(R.layout.layout_progress, (ViewGroup) findViewById(android.R.id.content),true)); 
list_book.setAdapter(new SimpleCursorAdapter(this,R.layout.layout_row,c,new String [] {BookDatabase.NAME,BookDatabase.AUTHOR,BookDatabase.PUBLISHER},new int[]{R.id.ltxt_name,R.id.ltxt_author,R.id.ltxt_pub})); 

而且layout_progress看起來像這樣

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:orientation="vertical" > 
    <ProgressBar 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:indeterminate="true" 
       android:layout_gravity="center" 
       android:src="@android:drawable/progress_indeterminate_horizontal" 
    /> 
<TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Loading Please Wait..."/> 
    </LinearLayout> 

如果以上代碼可以被使用什麼,我會作爲根視圖傳遞,我應該將我的進度條附加到根? 如果沒有ProgressBar,代碼就可以正常工作。

那麼,這樣做的正確方法是什麼?

此外,還有在這行代碼中的錯誤:

getLoaderManager().initLoader(0, null, this); 

解決了這一之一:需要使用

getSupportLoaderManager().initLoader(0,null,this); 

回答

0

我自己解決了這個問題。我在AsyncTask中使用了ProgressDialog。

ProgressDialog dialog; 
    private class ExampleTask extends AsyncTask<Uri,Void,Cursor>   
    { 
    protected void onPreExecute() 
    { 
     dialog=new ProgressDialog(); 
     dialog.setTitle("Please Wait"); 
     dialog.setMessage("Loading list of stuff"); 
    } 
    //doInBackground goes here... 
    protected void onPostExecute(Cursor result) 
    { 
     //load elements into the ListView by setting it's adapter 
     dialog.dismiss(); 
    }  

這將導致一個錯誤,指出:

has leaked window [email protected] that was originally added here 

所以,你必須解僱ProgressDialog中的onPause方法,以防萬一沒有達到onPostExecute。

protected void onPause() 
    { 
     if(dialog!=null) 
      dialog.dismiss(); 
    } 
0

我敢打賭,你使用了錯誤的LayoutParams類。

看你的文件頂部的導入。您必須導入特定的靜態LayoutParams類型(例如import android.view.ViewGroup.LayoutParams;)並非所有的LayoutParams類都是相同的,並且您嘗試實例化的類可能沒有您嘗試使用的構造函數。

您的意見的父母是FrameLayout?現在,我打賭你想使用FrameLayout.LayoutParams constructor,它採用第三個int參數來指定Gravity。但是,您的導入指定了一個沒有(int,int,int)構造函數的類(例如ViewGroup.LayoutParamsLinearLayout.LayoutParams)。所以編譯器抱怨。

編輯:對於你的第二塊,我相信你錯過了一個括號。否則,這看起來很好。 (同樣,假設你輸入正確的LayoutParams型

pb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //two parens here to close

我通常指喜歡更明確一些,我使用的是什麼的LayoutParams類,以避免這類錯誤:

new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER)

+0

的進度的目標父是ListView控件本身... http://developer.android.com/guide/topics/ui/layout/listview.html – vamsiampolu

+0

像「getListView()。setEmptyView(進度);」另外,使用更正後的語法嘗試第二個並沒有糾正錯誤 – vamsiampolu