【问题标题】:Can't remove or hide a view in Android无法在 Android 中删除或隐藏视图
【发布时间】:2015-05-23 20:50:31
【问题描述】:

在将数据加载到涉及 ListView 的片段中后,我试图删除进度指示器。这是我的完成处理程序:

getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
        dataSource = (ArrayList<Map<String, Object>>) task.getResult();
        PostAdapter adapter = new PostAdapter(getActivity(), dataSource);
        ListView list = (ListView) rootView.findViewById(R.id.listView);
        list.setAdapter(adapter);
        View indicator = getActivity().findViewById(R.id.indicator);
        RelativeLayout layout = (RelativeLayout) getActivity().findViewById(R.id.layout);
        layout.removeView(indicator);
    }
});

最后 3 行代码是相关部分。一切都被正确调用,没有什么是空的等等。在调试中一切都很好。适配器也可以正常工作,填充我的列表,但指示器仍在屏幕上。我也尝试将其可见性设置为GONEHIDDEN,但它们似乎也没有隐藏它。我见过Android - Can't hide progress bar,但它的答案涉及setEmptyView(),无论如何我都没有使用它。我在另一个选项卡中使用了相同的片段(当然,不同的实例),它可以正常工作。

这是我的布局文件:

<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"
    android:padding="0dp"
    android:background="#ffffffff"
    android:id="@+id/layout">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView"
        android:layout_margin="0dp"
        android:padding="0dp" />

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/indicator"
        android:indeterminate="true"
        android:layout_centerInParent="true" />
</RelativeLayout>

我做错了什么?

【问题讨论】:

  • 好的,那么,您将显示一个进度条来发布正在完成的进度,对吗?你想隐藏它,但你不能。我说对了吗? (:
  • 我遇到过这个问题。对于不同的片段,您是否有相同的名称“R.id.indicator”?如果是,您可以尝试为其他“R.id.indicator”重命名不同的名称吗?请分享结果。
  • @LittleChild 是的,没错。
  • @Rollno1 我已经搜索了整个项目。在任何地方都没有其他名为 indicator 的资源。
  • 你能把你的 layout.xml 添加到你的问题中吗?也许会有所帮助。

标签: android android-fragments android-4.0-ice-cream-sandwich android-progressbar


【解决方案1】:

我发现了问题(感谢所有评论者)。我正在调用活动的方法来查找和删除视图。问题是,我在同一个活动中,在不同的选项卡下有同一个片段的多个实例。我已经使用我的片段的根视图来查找和删除指示器,而不是活动,并且它起作用了。

【讨论】:

    【解决方案2】:

    onClick(...)的最后三行代码改为:

    View indicator = (ProgressBar)rootView.findViewById(R.id.indicator);
    

    并使用:

    indicator.setVisibility(ProgressBar.GONE);    
    

    或代码:

    RelativeLayout layout = (RelativeLayout) rootView.findViewById(R.id.layout);
    layout.removeView(indicator);
    

    【讨论】:

    • 我没有看到您用相同的解决方案回答了自己。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2014-06-30
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多