Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Listview始终显示空视图_Android_Listview_Parse Platform - Fatal编程技术网

Android Listview始终显示空视图

Android Listview始终显示空视图,android,listview,parse-platform,Android,Listview,Parse Platform,我在listview中使用自定义加载数据。我想在没有数据时显示消息,但即使数据不是空的,也会显示消息。我认为这是因为数据尚未加载。我试过使用setEmptyView,也试过在适配器上测试mAdapter.isEmpty() 我试着在测试适配器是否为空之前等待几秒钟,但尽管它可以工作,但我认为这不是一个好的做法 我在其中进行查询的自定义适配器: public class CategoryEventsAdapter extends ParseQueryAdapter<Event> {

我在listview中使用自定义加载数据。我想在没有数据时显示消息,但即使数据不是空的,也会显示消息。我认为这是因为数据尚未加载。我试过使用
setEmptyView
,也试过在适配器
上测试mAdapter.isEmpty()

我试着在测试适配器是否为空之前等待几秒钟,但尽管它可以工作,但我认为这不是一个好的做法

我在其中进行查询的自定义适配器:

public class CategoryEventsAdapter extends ParseQueryAdapter<Event> {

    public CategoryEventsAdapter(Context context, final String c) {

    super(context, new ParseQueryAdapter.QueryFactory<Event>() {

            public ParseQuery<Event> create() {
                ParseQuery<Event> query = new ParseQuery<Event>("Event");
                query.whereEqualTo("published", true);
                query.whereEqualTo("category", c);
                return query;
            }
        });
    }

    @Override
    public View getItemView(Event event, View v, ViewGroup parent) {
        ...
    }
}

我从未使用过解析的这一特定部分,但看看文档,查询似乎是异步的。相反,您可以尝试以下方法:

mAdapter = new CategoryEventsAdapter(getActivity(), category);

// add a listener for when the query is done.
mAdapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
    public void onLoaded(List<ParseObject> objects, ParseException e) {
        // Check if empty here and show message.
        if (objects.size == 0){
            // show message
        }
    }
});

listview.setAdapter(mAdapter);
mAdapter=newcategoryeventsadapter(getActivity(),category);
//在查询完成时为添加侦听器。
mAdapter.addOnQueryLoadListener(新的OnQueryLoadListener(){
已加载公共void(列出对象,Parsee异常){
//检查此处是否为空并显示消息。
如果(objects.size==0){
//显示消息
}
}
});
setAdapter(mAdapter);

因此,一旦查询完成,它应该调用
onload
,这样您就可以确定它是否为空。在
onload
中,可以检查
对象的计数
参数。如果您在此时执行
mAdapter.isEmpty
,则不确定它是否已在适配器中设置

这是我的ParseQueryAdapter实现,它允许您选择一个“空”占位符。您只需从外部调用
adapter.setEmptyLayoutId(R.layout.empty)

public class ParseAdapter extends ParseQueryAdapter {

    private final static int EMPTY_VIEW = 2;
    private int emptyViewLayoutId;
    private boolean isEmpty;

    public ParseAdapter(Context c, QueryFactory<? extends ParseObject> q) {
        super(c, q);

        addOnQueryLoadListener(new OnQueryLoadListener() {
            @Override
            public void onLoading() {
                isEmpty = false;
            }

            @Override
            public void onLoaded(List list, Exception e) {
                if (list == null || list.size() == 0) {
                    isEmpty = true;
                }
            }
        });
    }

    @Override
    public void notifyDataSetChanged() {
        isEmpty = false;
        super.notifyDataSetChanged();
    }

    public void setEmptyLayoutId(int emptyViewLayoutId) {
        this.emptyViewLayoutId = emptyViewLayoutId;
    }


    @Override
    public View getItemView(ParseObject object, View v, ViewGroup parent) {
        if (isEmpty) {
            v = View.inflate(getContext(), emptyViewLayoutId, null);
            return v;
        }

        v = v != null ? v : View.inflate(getContext(), rowLayoutId, null);
        //do whatever you want on v
        return v;
    }

    @Override
    public int getViewTypeCount() {
        return super.getViewTypeCount() + 1; //3
    }

    @Override
    public int getItemViewType(int position) {
        return isEmpty ? EMPTY_VIEW : super.getItemViewType(position);
    }

    @Override
    public int getCount() {
        return isEmpty ? 1 : super.getCount();
    }
}
公共类ParseAdapter扩展了ParseQueryAdapter{
私有最终静态int空_视图=2;
私有int emptyViewLayoutId;
私有布尔是空的;

public ParseAdapter(上下文c,QueryFactory)能否发布ListView布局以及如何设置空视图?
public class ParseAdapter extends ParseQueryAdapter {

    private final static int EMPTY_VIEW = 2;
    private int emptyViewLayoutId;
    private boolean isEmpty;

    public ParseAdapter(Context c, QueryFactory<? extends ParseObject> q) {
        super(c, q);

        addOnQueryLoadListener(new OnQueryLoadListener() {
            @Override
            public void onLoading() {
                isEmpty = false;
            }

            @Override
            public void onLoaded(List list, Exception e) {
                if (list == null || list.size() == 0) {
                    isEmpty = true;
                }
            }
        });
    }

    @Override
    public void notifyDataSetChanged() {
        isEmpty = false;
        super.notifyDataSetChanged();
    }

    public void setEmptyLayoutId(int emptyViewLayoutId) {
        this.emptyViewLayoutId = emptyViewLayoutId;
    }


    @Override
    public View getItemView(ParseObject object, View v, ViewGroup parent) {
        if (isEmpty) {
            v = View.inflate(getContext(), emptyViewLayoutId, null);
            return v;
        }

        v = v != null ? v : View.inflate(getContext(), rowLayoutId, null);
        //do whatever you want on v
        return v;
    }

    @Override
    public int getViewTypeCount() {
        return super.getViewTypeCount() + 1; //3
    }

    @Override
    public int getItemViewType(int position) {
        return isEmpty ? EMPTY_VIEW : super.getItemViewType(position);
    }

    @Override
    public int getCount() {
        return isEmpty ? 1 : super.getCount();
    }
}