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中,在main.xml中有一个ProgressBar进度条组件和一个button按钮,在初始状态让该进度条隐藏怎么