我的片段中有一个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
}
答案 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
}