-1

我有扩展 SherlockListActivity 的 MainActivity。这是 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 添加到 main.xml 并带有“空”ID。只要 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>

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

4

1 回答 1

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;
于 2012-12-27T20:48:57.470 回答