在 Android 中显示 ArrayAdapter 的空视图

Show empty view for ArrayAdapter in Android

我的应用程序中有一个 ListView,它使用 setListAdapter()ListFragmentonActivityCreated() 中呈现。传入此 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
}