Android - 无法隐藏进度条

3

我看了其他隐藏进度条的问题,但它们似乎都建议做我已经在做的事情。

我正在尝试使用

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_width="match_parent"
    android:layout_height="match_parent" >

    <GridView
        android:id="@+id/product_list_gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        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_width="match_parent"
        android:layout_height="@dimen/refineHeaderHeight"
        android:background="@drawable/product_list_header"
        android:visibility="gone" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            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_width="wrap_content"
            android:layout_height="match_parent"
            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_width="wrap_content"
            android:layout_height="match_parent"
            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_width="match_parent"
        android:layout_height="wrap_content"
        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_width="15dp"
            android:layout_height="15dp"
            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_width="wrap_content"
            android:layout_height="wrap_content"
            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_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:visibility="gone"/>

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

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

</RelativeLayout>

你能否发布你的整个活动类? - DMC
1
相对布局中是否有其他项目的位置依赖于您的 mProductListProgressBar - kiruwka
1
@Russ 在你的代码片段中,是否有任何代码将某些元素位置相对于 mProductListProgressBar 设置为相对定位? - kiruwka
1
@Russ 嗯,我猜那可能解释了为什么它没有消失。试着传递其他东西。还要检查你的 mProductListProgressBar 是否在其他地方被引用,例如相对于你的进度条的某个其他视图位置。 - kiruwka
1
首先尝试将null传递给setEmptyView(),看看是否可以快速解决问题。同时,在文件中使用grep命令查找mProductListProgressBar以确保万无一失。 - kiruwka
显示剩余12条评论
4个回答

2
这种行为的问题通常发生在您试图隐藏的视图被其他人需要/引用时。
在您的情况下,正如您在评论中提到的那样,您使用mProductListProgressBar来设置GridViewsetEmptyView()
当相对容器布局中有其他视图将其位置相对于mProductListProgressBar设置时,也可能遇到类似麻烦的情况。此设置可以是代码或.xml中的任何一种。
请确保您没有上述任何内容,View.GONE应该可以正常工作。
至于 setEmptyView() - 它仅用于在适配器为空时向用户显示有意义的内容。我建议只需设置简单的布局,例如位于中间的TextView“无项目”,并将其传递给setEmptyView() 希望能有所帮助。

事实证明,您可以简单地设置 setEmptyView(null),我想这相当于完全忽略此调用。我刚试过了,在没有数据的情况下,您将拥有空白的网格视图。 - kiruwka

1

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

再确认一件事情就是你在UI线程中隐藏它。

为确保,请将您的UI代码包含在以下代码块中:

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

1
一个对我有效的解决方案是在XML中隐藏视图: android:visibility="gone" 然后在需要时运行时显示/隐藏它: yourProgressBar.setVisibility(View.VISIBLE) // 或者根据情况使用 View.VISIBLE

0

我不知道你的代码是怎么写的,但我曾经遇到过类似的问题,通过从声明中删除视图对象来解决了。

就像这样

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

应该是

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

试一下并检查

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


如果我移除mRoot,它会提示'The method findViewById(int) is undefined for the type ProductListFragment'。我在一个fragment中做所有这些操作。并且,不像进度条没有被该行找到,因为我可以移动它到屏幕上的其他位置,只是不能隐藏它。 - Russ Wheeler
使用 getListView().FindViewById(int)。 - Dinesh Prajapati
getListView不起作用(无效/未识别的函数),所以我使用了getView,但这仍然没有隐藏进度条。就像我说的,它已经成功地获取了进度条。我认为@kiruwka想出了一个方案,因为它与gridview有关联。 - Russ Wheeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接