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