0

我使用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>

如果可以使用上面的代码,我会将什么作为根视图传递,我应该将我的进度条附加到根视图吗?如果没有 ProgressBar,代码就可以正常工作。

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

另外,这行代码有一个错误:

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

解决了这个:需要使用

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

2 回答 2

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();
    }
于 2013-09-14T09:28:54.610 回答
0

我敢打赌你使用了错误的 LayoutParams 类。

查看文件顶部的导入。您必须导入特定的静态 LayoutParams 类型(例如import android.view.ViewGroup.LayoutParams;) 并非所有 LayoutParams 类都是平等的,并且您尝试实例化的类可能没有您尝试使用的构造函数。

您的视图的预期父母是 aFrameLayout吗?现在,我打赌你想使用FrameLayout.LayoutParams constructor,它需要第三个 int 参数来指定Gravity。但是您的导入指定了一个没有 (int, int, int) 构造函数的类(例如ViewGroup.LayoutParamsor LinearLayout.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)

于 2013-07-15T04:02:45.963 回答