Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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 Facebook executeBatchAsync和片段_Android_Android Listview_Android Fragments_Facebook Android Sdk - Fatal编程技术网

Android Facebook executeBatchAsync和片段

Android Facebook executeBatchAsync和片段,android,android-listview,android-fragments,facebook-android-sdk,Android,Android Listview,Android Fragments,Facebook Android Sdk,我有一个关于片段上的ListView的问题,该片段扩展了SherlockFragment。我想显示我在OnCreateView方法上使用executeBatchAsync的Facebook好友列表,以及ListView的自定义适配器。此适配器扩展了BaseAdapter。我能够用结果填充数组,但问题是片段总是首先呈现,因此,它显示空的ListView。下面是代码的一部分 @Override public View onCreateView(LayoutInflater inflater, Vie

我有一个关于片段上的ListView的问题,该片段扩展了SherlockFragment。我想显示我在OnCreateView方法上使用executeBatchAsync的Facebook好友列表,以及ListView的自定义适配器。此适配器扩展了BaseAdapter。我能够用结果填充数组,但问题是片段总是首先呈现,因此,它显示空的ListView。下面是代码的一部分

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group,
        Bundle saved) {

    View root = inflater.inflate(R.layout.fragment_guests, group, false);

    final Session session = Session.getActiveSession();

    if (session.isOpened()) {
        pd = ProgressDialog.show(getActivity(),
                getString(R.string.loading),
                getString(R.string.loading_friend_list));

        pd.setCancelable(false);

        Bundle params = new Bundle();

        String fqlQuery = "SELECT uid, name, pic_square FROM user WHERE uid IN "
                + "(SELECT uid2 FROM friend WHERE uid1 = me()) ORDER BY name";

        params.clear();
        params.putString("q", fqlQuery);

        fbRequest = new Request(session, "fql", params, HttpMethod.GET,
                new Request.Callback() {

                    @Override
                    public void onCompleted(Response response) {
                        try {
                            GraphObject graphObject = response
                                    .getGraphObject();

                            JSONObject jsonObject = graphObject
                                    .getInnerJSONObject();

                            JSONArray jsonArray = jsonObject
                                    .getJSONArray("data");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject friend = jsonArray
                                        .getJSONObject(i);

                                Friend f = new Friend();

                                f.setUid(friend.getString("uid"));
                                f.setName(friend.getString("name"));
                                f.setPhoto(friend.getString("pic_square"));

                                friends.add(f);
                            }

                            list = (ListView) getView().findViewById(
                                    R.id.friendsList);
                            list.setAdapter(adapter);

                            pd.dismiss();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });

        Request.executeBatchAsync(fbRequest);
    }

    return root;
}
因此,我的问题是:如何正确显示ListView


提前感谢

这是ItemAdapter类

class ItemAdapter extends BaseAdapter {

    private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();

    private class ViewHolder {
        public TextView text;
        public ImageView image;
    }

    @Override
    public int getCount() {
        return friends.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {
        View view = convertView;
        final ViewHolder holder;

        if (convertView == null) {
            view = getActivity().getLayoutInflater().inflate(
                    R.layout.friend_list_item, parent, false);
            holder = new ViewHolder();
            holder.text = (TextView) view.findViewById(R.id.tvFriendName);
            holder.image = (ImageView) view
                    .findViewById(R.id.imgFriendPhoto);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        Friend friend = friends.get(position);

        if (friend != null) {
            String name = friend.getName();
            String photoUrl = friend.getPhoto();

            holder.text.setText(name);

            imageLoader.displayImage(photoUrl, holder.image, imageOptions,
                    animateFirstListener);
        }

        return view;
    }
}

很难说你想要什么。那么,该列表是否显示了所有数据?还是在加载数据时要求显示某些内容?何时更新适配器中的数据?否,列表中未显示数据。我认为问题是在异步请求仍在运行时返回根,因此ListView是空的。我不知道如何等待请求完成,然后返回根视图。因此,使用list.setAdapteradapter;,设置适配器;,但您没有包括定义适配器的位置。发布这部分代码。公共类GuestsFragment扩展SherlockFragment{private ItemAdapter adapter;//更多代码}ItemAdapter是一个自定义适配器,从BaseAdapterWell扩展而来,解决方案非常简单!我忘记初始化ItemAdapter对象。