6

EditText我对,Button和有一个看法ListView。ButtononClick()解析了一些站点(这部分工作正常),但是在 中显示解析的信息需要一些时间ListView,所以我想ProgressBar在这个地方显示小的,ListView一段时间后应该发生的地方。

所以,我把它添加到我的布局中(我在这里写了重要的部分):

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/layout1"
        android:weightSum="1.0">

        <EditText
            android:layout_width="0px"
            android:layout_height="wrap_content"
            android:layout_weight=".86" />

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0px"
            android:layout_weight=".14" />

    </LinearLayout>

    <RelativeLayout 
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_below="@id/layout1"
        android:gravity="center"
        android:layout_centerInParent="true"
        android:id="@+id/progressbar" >

        <ProgressBar 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            style="@android:style/Widget.ProgressBar.Small" />

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/layout1">

        <ListView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

    </RelativeLayout>

</RelativeLayout>

在源代码中:

progressBar = (RelativeLayout) findViewById(R.id.progressbar);

每次我想展示 时ProgressBar,我都会这样做:

progressBar.setVisibility(View.VISIBLE);

禁用:

progressBar.setVisibility(View.INVISIBLE);

但这不起作用。

我怎样才能解决这个问题?

4

5 回答 5

2

无需操纵您ProgressBar的可见性。ListView有一个称为“空视图”的功能,仅当您ListView为空时才会显示。以下是您需要执行的操作:

  1. 如果您的活动扩展ListActivity,请使用 android:id="@android:id/list"for yourListViewandroid:id="@android:id/empty"for your ProgressBar
  2. 如果你不扩展ListActivity,你的有一个setEmptyView() 方法ListView,它可以让你做同样的事情。

如果您不需要清空您的ListView(例如数据仅加载一次,在活动启动时),上述方法最适合。如果之后需要设置数据,最好使用ViewSwitcher,它还有一个很大的优势——它可以让你应用过渡动画。有关详细信息ViewSwitcher,请查看

于 2012-12-05T19:32:03.267 回答
1

您无需将您的嵌套ProgressBar在另一个RelativeLayout. 只需将它放在您的主布局中并将其放在最后,使其保持在顶部。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   // the rest  

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content" />   

</RelativeLayout>
于 2012-12-04T19:17:40.653 回答
1

尝试使用上面提到的异步任务。

/**
 * this class performs all the work, shows dialog before the work and dismiss it after
 */
 public class ProgressTask extends AsyncTask<String, Void, Boolean> {

public ProgressTask(ListActivity activity) {
    this.activity = activity;
    dialog = new ProgressDialog(context);
}

/** progress dialog to show user that the backup is processing. */
private ProgressDialog dialog;
/** application context. */
private ListActivity activity;

protected void onPreExecute() {
    this.dialog.setMessage("Progress start");
    this.dialog.show();
}

    @Override
protected void onPostExecute(final Boolean success) {
    if (dialog.isShowing()) {
        dialog.dismiss();
    }


    //do whatever with your data
}

protected Boolean doInBackground(final String... args) {
   try{    
      //parsing of your website here...

      return true;
   } catch (Exception e)
      Log.e("tag", "error", e);
      return false;
   }
  }
}
于 2012-12-04T19:17:12.850 回答
1

与隐藏你的RelativeLayout.Modify这样的布局,看看它是怎么回事:ListViewProgressBar

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/layout1"
        android:weightSum="1.0">

        <EditText
            android:layout_width="0px"
            android:layout_height="wrap_content"
            android:layout_weight=".86" />

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0px"
            android:layout_weight=".14" />

    </LinearLayout>

    <ListView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:layout_below="@id/layout1"/>

    <RelativeLayout 
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_centerInParent="true"
        android:id="@+id/progressbar" >

        <ProgressBar 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            style="@android:style/Widget.ProgressBar.Small" />

    </RelativeLayout>   


</RelativeLayout>

也看看我的一个答案,对于一个有点类似的问题。

于 2012-12-04T19:17:23.943 回答
0

对于那些对答案感兴趣的人。

仅写入主要标签。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/layout1"
        android:weightSum="1.0" >

        <EditText
            android:layout_width="0px"
            android:layout_height="wrap_content"
            android:layout_weight=".86" />

        <ImageButton
            android:layout_height="match_parent"
            android:layout_width="0px"
            android:layout_weight=".14" />

    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/layout1" >

        <ListView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/layout1" />

    </RelativeLayout>

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/layout1"
        android:gravity="center"
        android:visibility="gone"
        android:background="#DDE7E7E8"
        android:id="@+id/pBar" >

        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/Widget.ProgressBar.Small"  />

    </LinearLayout>

</RelativeLayout>

AsyncTask

private class Parsing extends AsyncTask<Void, Void, Void>
{
    private LinearLayout pBar; 

    private Parsing()
    {
        pBar = (LinearLayout) findViewById(R.id.pBar);
    }

    @Override
    protected Void doInBackground(Void... params) 
    {
        parsingHere();
        return null;
    }

    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
        pBar.setVisibility(View.VISIBLE);
    }

    @Override
    protected void onPostExecute(Void result) 
    {
        super.onPostExecute(result);
        pBar.setVisibility(View.INVISIBLE);
    }

}
于 2012-12-05T19:09:12.513 回答