如何将ProgressBar添加到SherlockListActivity类

时间:2012-12-27 20:44:19

标签: android android-layout listview listactivity android-progressbar

我有MainActivity,它扩展了SherlockListActivity。这是onCreate方法:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    new MyXMLDownloader().execute(this);
}

MyXMLDownloader只是AsyncTask类,我用它从http下载XML文件。在onPostExecute方法中,我正在调用makeMainGUI(),它根据该XML文件创建GUI(我的意思是它填充了我的ListView)。

这是main.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

我想添加ProgressBar小部件(和一些文本)。它应该在下载XML之前显示,并且它应该在ListView填充后消失(当然它是在下载XML之后发生的)。我怎样才能做到这一点?

我有问题,因为我必须在main.xml中有ListView,因为我的MainActivity类扩展了SherlockListActivity。

编辑:

我设法做了这样的事情:

<ProgressBar
        android:id="@android:id/empty"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

我将ProgressBar添加到带有“空”id的main.xml。只要ListView为空,就会显示,这是正确的。但我不知道如何在这里放置TextView,因为只有一个项目可以有一个“空”ID。

EDIT2: 我认为我设法做到了这一点。在main.xml中我添加了以下内容:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center" 
    android:id="@android:id/empty">
    <ProgressBar
    style="?android:attr/progressBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" 
    android:id="@+id/progressBar1"/>

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Please wait"
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:id="@+id/waitingTextView"/>

</LinearLayout>

这是我需要的东西。谢谢!

1 个答案:

答案 0 :(得分:0)

在AsyncTask类中,使用onPrexecute方法显示进度对话框并使用onPostExecute来关闭它:

@Override
protected void onPreExecute()
{
    super.onPreExecute();
    pDialog = new ProgressDialog(YOUR_ACTIVITY_CLASS_NAME.this);
    pDialog.setMessage("Please Wait");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    pDialog.show();
}

@Override
protected void onPostExecute(String str)
{
    // Dismiss the dialog once finished
    pDialog.dismiss();  
}

在调用之前不要忘记定义pDialog:

ProgresDialog pDialog;