当适配器为空时,有没有办法指定用于ListView的布局?

时间:2011-05-01 16:02:20

标签: android layout

我在布局中有一个复杂的空视图,带有图标,文本,按钮等。

当listview为空时,在layout.xml中选择一个视图很容易,类似于
getListView()setEmptyView(findViewById(R.id.empty));
当代码驻留在layout.xml文件中时,此代码将空视图设置为正常。

现在我想将此视图重构为自己的empty.xml布局文件,并将其编码为类似于以下内容:

// Setup the empty layout.xml
LayoutInflater vi = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vlEmpty = vi.inflate(R.layout.empty, null);

// Find the empty layout view
vEmpty = vlEmpty.findViewById(R.id.llEmpty);
vEmpty.setOnClickListener(ocl);

// Find the ListView
vListView = (ListView) findViewById(R.id.lvWords);
vListView.setEmptyView(vEmpty);

问题是llEmpty中的细节永远不会出现;完全相同的布局和视图与主要布局一起使用,而不是重构到它自己的xml文件中。

有没有人有这样的工作?

2 个答案:

答案 0 :(得分:2)

您可能需要将正确的上下文传递给inflater:

vListView = (ListView) findViewById(R.id.lvWords);
View vlEmpty = vi.inflate(R.layout.empty, (ViewGroup)vListView.getParent());

哪些(应该)使它们都存在于同一个根视图中。仅传递父活动的根视图就足够了。

如果有效,请告诉我。

答案 1 :(得分:0)

我怀疑setEmptyView()会自动将所提供的View作为您活动中任何容器的子项。

就个人而言,我只是使用<include>元素而不是单独对其进行充气。但是,如果你真的想单独对它进行充气,那么在我写这篇文章时Femi发布的答案可能有效,这取决于ListView的父母是什么。