Android - 无法隐藏进度条

Posted

技术标签:

【中文标题】Android - 无法隐藏进度条【英文标题】:Android - Can't hide progress bar 【发布时间】:2014-01-01 03:33:03 【问题描述】:

所以我检查了其他问题以隐藏进度条,但似乎都建议做我已经在做的事情。

我正在尝试使用

mProductListProgressBar.setVisibility(View.GONE);

我找到它了

mProductListProgressBar = (ProgressBar) mRoot.findViewById(R.id.product_list_progressbar);

我知道这是正确的进度条,因为我可以使用各种 LayoutParams 命令在屏幕上移动它。但它不会隐藏。

我当前的代码(包括进度条的移动)是

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
mProductListProgressBar.setLayoutParams(params);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
mProductListProgressBar.setLayoutParams(params);

mProductListProgressBar.setVisibility(View.GONE);
mProductListErrorTextView.setVisibility(View.VISIBLE);
mProductListErrorTextView.setText(errorMessage);

进度条移动到左侧和底部,但仍然可见。我已经尝试过 View.INVISIBLE 和 View.GONE 但都不起作用。

快把我逼疯了!

谢谢

更新 1

protected void showError(int errorMessage)

    /*RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
    mProductListProgressBar.setLayoutParams(params);
    params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
    mProductListProgressBar.setLayoutParams(params);
    */
    mProductListProgressBar.setVisibility(View.GONE);
    mProductListErrorTextView.setVisibility(View.VISIBLE);
    mProductListErrorTextView.setText(errorMessage);

并调用它

showError(R.string.wish_list_empty);

更新 2

片段的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_ >

    <GridView
        android:id="@+id/product_list_gridview"
        android:layout_
        android:layout_
        android:background="@android:color/transparent"
        android:horizontalSpacing="@dimen/standardMargin"
        android:listSelector="@android:color/transparent"
        android:numColumns="@integer/columns"
        android:scrollbarStyle="outsideOverlay"
        android:verticalSpacing="@dimen/standardMargin" />

    <RelativeLayout
        android:id="@+id/product_list_header"
        android:layout_
        android:layout_
        android:background="@drawable/product_list_header"
        android:visibility="gone" >

        <ImageView
            android:layout_
            android:layout_
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:padding="10dp"
            android:src="@drawable/dropdown_image" />

        <TextView
            android:id="@+id/product_list_header_title"
            android:layout_
            android:layout_
            android:gravity="center|left"
            android:paddingLeft="10dp"
            android:textAllCaps="true"
            android:textColor="@android:color/black"
            android:textIsSelectable="false"
            android:textSize="@dimen/standardTextSize" />

        <TextView
            android:id="@+id/product_list_refine_button"
            android:layout_
            android:layout_
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:background="@drawable/button"
            android:clickable="true"
            android:gravity="center_vertical"
            android:paddingLeft="20dp"
            android:paddingRight="30dp"
            android:text="@string/refine"
            android:textAllCaps="true"
            android:textColor="#838383"
            android:textSize="@dimen/standardTextSize" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/product_list_footer"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:layout_gravity="center"
        android:background="@drawable/product_list_footer"
        android:gravity="center"
        android:orientation="horizontal"
        android:padding="15dp"
        android:visibility="gone" >

        <ProgressBar
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginRight="10dp"
            android:background="@android:color/transparent"
            android:gravity="center" />

        <TextView
            android:id="@+id/product_list_footer_text_view"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:gravity="center"
            android:text="@string/loading_message"
            android:textAllCaps="true"
            android:textSize="@dimen/standardTextSize" />
    </LinearLayout>

    <ProgressBar
        android:id="@+id/product_list_progressbar"
        android:layout_
        android:layout_
        android:layout_centerInParent="true"
        android:visibility="gone"/>

    <TextView
        android:id="@+id/product_list_error_text"
        android:layout_
        android:layout_
        android:layout_centerInParent="true"
        android:textAllCaps="true"
        android:textSize="@dimen/standardTextSize"
        android:visibility="gone" />

    <TextView
        android:id="@+id/debug"
        android:layout_
        android:layout_
        android:background="#aa000000"
        android:gravity="left|center_vertical"
        android:minLines="2"
        android:padding="10dp"
        android:textColor="@android:color/white"
        android:visibility="gone" />

</RelativeLayout>

【问题讨论】:

你能把你的整个活动课贴出来吗? 相对布局中是否还有其他项目的位置依赖于/“相对”于您的mProductListProgressBar @Russ 在您的片段代码中,是否有任何代码可以设置相对于mProductListProgressBar的某些元素位置 @Russ 好吧,我想这可以解释它并没有让它消失。尝试传递其他东西。并检查您的mProductListProgressBar 是否未在其他地方引用,例如与进度条“相对”的其他视图位置 首先尝试将null 传递给 setEmptyView();看看这是否可以解决它作为一个快速的黑客。还要在你的文件中为mProductListProgressBar grep 以确保超级确定。 【参考方案1】:

我不知道您的代码是如何编写的,但有类似的问题并通过从声明中删除视图对象来解决

喜欢

mProductListProgressBar = (ProgressBar) mRoot.findViewById(R.id.product_list_progressbar);

应该是

mProductListProgressBar = (ProgressBar) findViewById(R.id.product_list_progressbar);

试试看

原因是进度条位于层次结构中每个视图的顶部,它不属于任何根视图。

【讨论】:

如果我删除 mRoot,它会说“方法 findViewById(int) 未定义用于 ProductListFragment 类型”我在片段中执行所有这些操作。此外,该行没有找到进度条,因为我可以在屏幕上移动它,而不是隐藏它 使用 getListView().FindViewById(int) getListView 不起作用(不是有效/公认的功能)所以我使用了 getView,但这并没有隐藏进度条。正如我所说,无论如何它已经成功地抓住了进度条。我认为@kiruwka 想出了一些东西,因为它与网格视图相关联【参考方案2】:

当您尝试隐藏的视图被其他人需要/引用时,通常会出现这种行为的问题。

在您的情况下,正如您在 cmets 中提到的那样,您将 mProductListProgressBar 用于 setEmptyView()GridView

当您的相对容器布局中有其他视图将其位置相对设置为您的mProductListProgressBar 时,遇到类似问题的另一种可能性。此设置可以在代码中或 .xml 中。

请确保您没有上述任何内容,并且 View.GONE 应该可以正常工作。

至于setEmptyView() - 它仅用于在适配器为空时向用户显示有意义的内容。我建议只为它设置简单的布局,例如,TextView "no items",在中间,然后将它传递给setEmptyView()

希望对您有所帮助。

【讨论】:

好吧,事实证明你可以简单地设置setEmptyView(null),我猜这相当于完​​全忽略这个调用。我刚试了一下,如果没有数据你会得到空白的gridview。【参考方案3】:

我知道这是一个老问题。但是我只是花了很多时间调试类似的情况。我无法在 unityPlayer 视图顶部隐藏 ProgressBar。

还要确保您在 UI 线程中隐藏它。

为了确保围绕您的 UI 代码:

    runOnUiThread(new Runnable() 
        @Override
        public void run() 
            loadingIndicator.setVisibility(View.GONE);
        
    );

【讨论】:

【参考方案4】:

一个对我有用的解决方案是在 XML 中隐藏视图:

android:visibility="gone"

然后在需要时在运行时取消隐藏/隐藏它:

yourProgressBar.setVisibility(View.VISIBLE) // or View.VISIBLE depending on situation

【讨论】:

以上是关于Android - 无法隐藏进度条的主要内容,如果未能解决你的问题,请参考以下文章

Android 圆形进度条控件

在android中,在main.xml中有一个ProgressBar进度条组件和一个button按钮,在初始状态让该进度条隐藏怎么

使用绑定时无法隐藏进度条

Android ProgressBar SeekBar

无法更新android应用程序上的进度条

微信小程序-video禁止拖动进度条