使用带有列表视图的不确定进度条

时间:2013-07-15 03:21:04

标签: android progress-bar

我使用http://developer.android.com/guide/topics/ui/layout/listview.html作为参考。 当我使用:

时,我试图在ListView中使用Indeterminate ProgressBar
    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>

如果可以使用上面的代码,我将以root视图的形式传递,是否应将我的进度条附加到root? 没有ProgressBar,代码就可以正常工作。

那么,这样做的正确方法是什么?

此外,此行代码中存在错误:

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

解决了这个问题:需要使用

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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 com.android.internal.policy.impl.PhoneWindow$DecorView@43e75f40   that was originally added here 

因此,您必须在onPause方法中关闭ProgressDialog以防万一未达到onPostExecute。

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