Android:将ProgressDialog限制为子视图

时间:2011-07-14 15:02:05

标签: android progressdialog

我想显示一个ProgressDialog,但是它限制了它对子视图的可见性。据我所知,ProgressDialog占用整个屏幕并禁用访问屏幕的任何部分,直到ProgressDialog被解除。

我滚动了自己的标签控件,当一个标签下的内容忙于执行冗长的任务时,我希望ProgressDialog只显示在该标签的内容区域内。用户可以随时选择另一个选项卡,而另一个选项卡正忙于执行其任务并显示其ProgressDialog。

我怀疑这是不可能的,并且必须滚动我自己的ProgressDialog。但是,由于创建ProgressDialog的第一个参数是上下文,并且通常设置为“this”,我想知道是否可以从子视图中检索上下文,但仅限于子视图。 View上的getContext似乎可以获取应用程序本身的上下文。

3 个答案:

答案 0 :(得分:1)

你可以用一种棘手的方式实现这一目标,这对我有用..

在指定选项卡内容的布局文件中,将进度条设置为:

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

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1" >

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

        <ProgressBar
            android:id="@+id/progressbar"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
           />
    </FrameLayout>

</LinearLayout>

并在活动中显示标签内容,通过以下方式显示列表或进度条(一次只显示一个):

if(list != null){
            progressBar.setVisibility(View.INVISIBLE);
            updatesListView.setVisibility(View.VISIBLE);
                        adapter = new YourListAdapter(this, list);
            updatesListView.setAdapter(adapter);
        } else{
            progressBar.setVisibility(View.VISIBLE);
            updatesListView.setVisibility(View.INVISIBLE);
            new Thread(downloadListContent).start();
        }

在完成下载线程后,通过处理程序或runOnUIThread,使visiblity反转为

progressBar.setVisibility(View.INVISIBLE);
updatesListView.setVisibility(View.VISIBLE);

答案 1 :(得分:0)

考虑到Android在任何给定时间只在前台有一个活动,我相信这对于正常活动可能是不可能的(尽管可能会被误解)。但我想Fragments可能就是你要找的东西?

答案 2 :(得分:0)

基础ProgressDialog控制你的线程,因此不允许你按照自己的意愿去做。

一个普通的Widget(而不是Dialog),类似于普通的Progress,你可以自己动手做任何事情。

如果标签上已有其他内容正忙,并且您想“覆盖”该内容,则可以使用Fragment代替..

最容易实现很可能是一个覆盖你的标签内容并隐藏其他元素的小部件。最好的代码是使用后者..