我有一个包含
EditText
、Button
和ListView
的视图。
当点击EditText
、Button
和ListView
的视图。
当点击 ProgressBar
的可见性。 ListView
具有称为“空视图”的功能,仅在您的 ListView
为空时显示。 这是您需要执行的操作:
ListActivity
,请使用android:id =“@ android:id / list”
作为ListView
的ID,并使用android:id =“@ android:id / empty”
作为ProgressBar
的ID。ListActivity
,则可以使用ListView
的setEmptyView()
方法执行相同的操作。ListView
(例如,数据仅在活动启动时加载)。 如果之后需要设置数据,则最好使用ViewSwitcher
,它还具有很大的优势-它允许您应用过渡动画。 有关ViewSwitcher
的详细信息,请参阅this。尝试使用像上面提到的异步任务。
/**
* 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;
}
}
}
RelativeLayout
与ListView
重叠导致你的ProgressBar
无法显示,请按照以下方式修改布局并查看效果:
<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>
另外可以看看我的一个回答,可能会对你有帮助。
您不需要将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>
对于那些对答案感兴趣的人。
只编写了主要标签。
<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);
}
}
ProgressBar
显示。它的工作方式就像没有添加ProgressBar
一样。 - azizbekianLinearlayout
和其后的两个RelativeLayouts
)定位在主RelativeLayout
中(它们的宽度/高度、定位规则等)。如果这仍然失败,请参考logray所说的内容。 - user