在 Android 中显示 ArrayAdapter 的空视图
Show empty view for ArrayAdapter in Android
我的应用程序中有一个 ListView
,它使用 setListAdapter()
在 ListFragment
的 onActivityCreated()
中呈现。传入此 setListAdapter()
的是我对 ArrayAdapter
的实现。有时这个适配器可以是空的,这很好,但在那些时候我想在列表中显示一条消息,告诉它没有项目,而不仅仅是一个空视图。但是我真的不知道如何实现这一点,因为我已经研究过大多数人在 ListActivity
中显示列表并且通过这样做你可以 setEmptyView()
但这在使用时似乎不可行ListFragment
。另一种方法是,如果 ArrayAdapter
中没有项目,则更改 ListFragment
中的视图,然后将视图更改为显示消息的另一个视图,但这在我看来有点老套。
实现我想要实现的目标的真正正确方法是什么?
尝试 setEmptyView()
我的 ListView
但这也没有用,请参阅我的 ListFragment
:
中关于视图如何膨胀的代码
public class MyFragment extends ListFragment {
@SuppressLint("InflateParams")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ListView listView = (ListView) inflater.inflate(R.layout.my_list, null);
listView.setEmptyView(inflater.inflate(R.layout.list_items_missing, null));
return listView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
MyItemArrayAdapter adapter = new MyItemArrayAdapter(getActivity());
// Populate adapter with items...
setListAdapter(adapter);
}
}
如果我的适配器中不存在任何项目,这是否会导致显示空视图?
1) 尝试将 backgroundImage
for ListView
放在 xml
中。如果没有项目,则显示 backgroundImage
,如果有项目,则显示背景色。
2) 你也可以做@kgandroid suggested and here, setEmptyView()
你设置的自定义视图。
示例:
另一个:
您可以自定义您的适配器以在 (item == null)
时显示 R.layout.list_items_missing
布局,而不是扩充您实施的常规自定义列表项布局。
像这样:
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder; //asuming you have this in your custom adapter
if (convertView == null) {
holder = new ViewHolder();
if(MyItemArrayList.get(position)!=null)
{
convertView = this.inflater.inflate(R.layout.layout_list_item,
parent, false);
else
{
convertView = this.inflater.inflate(R.layout.list_items_missing,
parent, false);
}
//the rest of the adapter logic
}
我的应用程序中有一个 ListView
,它使用 setListAdapter()
在 ListFragment
的 onActivityCreated()
中呈现。传入此 setListAdapter()
的是我对 ArrayAdapter
的实现。有时这个适配器可以是空的,这很好,但在那些时候我想在列表中显示一条消息,告诉它没有项目,而不仅仅是一个空视图。但是我真的不知道如何实现这一点,因为我已经研究过大多数人在 ListActivity
中显示列表并且通过这样做你可以 setEmptyView()
但这在使用时似乎不可行ListFragment
。另一种方法是,如果 ArrayAdapter
中没有项目,则更改 ListFragment
中的视图,然后将视图更改为显示消息的另一个视图,但这在我看来有点老套。
实现我想要实现的目标的真正正确方法是什么?
尝试 setEmptyView()
我的 ListView
但这也没有用,请参阅我的 ListFragment
:
public class MyFragment extends ListFragment {
@SuppressLint("InflateParams")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ListView listView = (ListView) inflater.inflate(R.layout.my_list, null);
listView.setEmptyView(inflater.inflate(R.layout.list_items_missing, null));
return listView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
MyItemArrayAdapter adapter = new MyItemArrayAdapter(getActivity());
// Populate adapter with items...
setListAdapter(adapter);
}
}
如果我的适配器中不存在任何项目,这是否会导致显示空视图?
1) 尝试将 backgroundImage
for ListView
放在 xml
中。如果没有项目,则显示 backgroundImage
,如果有项目,则显示背景色。
2) 你也可以做@kgandroid suggested and here, setEmptyView()
你设置的自定义视图。
示例:
另一个:
您可以自定义您的适配器以在 (item == null)
时显示 R.layout.list_items_missing
布局,而不是扩充您实施的常规自定义列表项布局。
像这样:
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder; //asuming you have this in your custom adapter
if (convertView == null) {
holder = new ViewHolder();
if(MyItemArrayList.get(position)!=null)
{
convertView = this.inflater.inflate(R.layout.layout_list_item,
parent, false);
else
{
convertView = this.inflater.inflate(R.layout.list_items_missing,
parent, false);
}
//the rest of the adapter logic
}