填充适配器时,Android ListView变为可见

时间:2017-03-22 20:22:56

标签: android listview firebaseui

我的片段中有一个ListView,我希望在单击按钮之前保持隐藏状态。我已将其可见性设置为“已消失”的XML和片段的onResume以获得良好的衡量标准,但在屏幕打开时它仍然可见。切换按钮或暂停并正确恢复片段会重置其可见性。

通过一些试验和错误,我发现提供适配器,或者更确切地说有适配器要呈现的数据,会导致视图忽略其声明的可见性并变得可见。适配器扩展FirebaseListAdapter,它会不断加载数据。

如何阻止这种情况发生?我通过将ListView包装在RelativeLayout中并修改其可见性来解决这个问题,但最好只是隐藏ListView。

XML:

<ListView
android:id="@+id/projects_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"/>

片段:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    ...
    mProjectAdapter = new ProjectAdapter(getActivity(), query);
    mProjectsListView.setAdapter(mProjectAdapter); // remains hidden if this is removed
    mProjectsListView.setEmptyView(noProjects);
}
@Override
public void onResume() {
    super.onResume();
    mProjectsListView.setVisibility(View.GONE); // overridden when adapter is used, but works for subsequent calls
}

2 个答案:

答案 0 :(得分:0)

使用普通的arrayadapter而不是依赖于firebase列表适配器。现在,在您的位置放置一个子事件监听器。还将值事件侦听器放在同一位置。使用子事件侦听器触发的事件将数据添加到支持适配器的arraylist。

值事件侦听器仅在所有子事件完成后触发...使用此触发器来触发调用以通知已更改的数据集并且已设置。

答案 1 :(得分:0)

尝试将适配器初始化代码移动到onCreateView中,并在onActivityCreated中设置可见性:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
    mProjectAdapter = new ProjectAdapter(getActivity(), query);
    mProjectsListView.setAdapter(mProjectAdapter); // remains hidden if this is removed
    mProjectsListView.setEmptyView(noProjects);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    ...
    mProjectsListView.setVisibility(View.GONE); // overridden when adapter is used, but works for subsequent calls    
}
相关问题