gpt4 book ai didi

Android - Facebook SDK - FriendPicker setSelected 不工作

转载 作者:行者123 更新时间:2023-11-29 21:02:12 25 4
gpt4 key购买 nike

我刚刚使用 Facebook 提供的 Android SDK 实现了好友选择器。一切似乎都运行良好,除非用户想要返回选择器并编辑他们的 friend 选择。我能够获得之前选择的 friend ,并在 friendPickerFragment 上调用 setSelection(它接收 List 对象,通过 Log.d 确认)。然而, friend 们并没有被预选!!在我的 PickerActivity 中,我正在调用:

@Override
protected void onResume() {
super.onResume();
if (FRIEND_PICKER.equals(getIntent().getData())) {
Log.d(LOG, "HERE");
try {
if (selectedFriends()!=null) {
Log.d(LOG, "U HAVE FRIENDS: " + selectedFriends().size());
friendPickerFragment.setSelection(selectedFriends());
}
friendPickerFragment.setFriendPickerType(FriendPickerType.TAGGABLE_FRIENDS);
friendPickerFragment.loadData(false);
} catch (Exception ex) {
onError(ex);
}
}
}

我也试过只调用 setSelection,认为对 loadData 的调用可能会清除选择...但仍然没有成功。我还注意到我的 PickerActivity(由 Scrumptious fb 教程设计)onCreate 每次我打开 friend 选择器时都会被调用...可能会强制重新加载数据。有没有人有让这个工作的经验?我现在很困惑。提前致谢。

最佳答案

要理解此回复,您需要阅读我在上述原始问题下的评论。

我的发现:当您更改 Facebook 的 FriendPickerFragment输入 FriendPickerType.TAGGABLE_FRIENDS返回的数据设置为不缓存。这意味着每次显示 friend 选择器时都会重新加载数据,由于某种原因,这会导致在重新加载完成后不会重新选择任何先前选择的 friend 。我仍然不确定为什么会这样,因为 FriendPickerFragment 似乎仍然通过它的 preSelectedFriendIds List<String> 引用那些选定的 friend 。对象(因此更好的解决方案可能是确定发生这种情况的原因)。此外,如果您更改 FriendPickerType.TAGGABLE_FRIENDS为了允许缓存,当您重新启动 FriendPickerFragment 时,您会立即看到您之前选择的 friend 实际上已被选中,但随后 FriendPickerFragment 意识到它从缓存中加载了数据(即使只有一些数据),这导致它刷新它的数据!再次,重置之前选择的好友!

我采取的解决方法:这可能不是解决此问题的最佳方法,因为我确信 Facebook 制作了 FriendPickerType.TAGGABLE_FRIENDS由于某种原因不可缓存。我最初的想法是,这是因为如果它是从缓存中加载的,它可能并不总是包含用户的完整 friend 列表,或者可能只是需要缓存很多 friend (数据)。但是,我将类型切换为可缓存。然后我添加了一个 boolean到 FriendPickerFragment,指示这是否是第一次加载数据。如果您遵循 Facebook 教程,您会看到他们使用名为 populateParameters(Intent intent, String userId, boolean multiSelect, boolean showTitleBar, boolean initialLoad) 的静态方法设置 FriendPickerFragment。 .在启动 FriendPicker 之前,我会检查我的启动 Activity 是否已经显示 FriendPicker。如果还没有,我将 initialLoad bool 值设置为 true,否则如果它已经显示,我将初始 bool 值设置为 false。这个 bool 值控制私有(private)类下 Facebook 的 FriendPickerFragment 中的 onLoadFinished() 方法 ImmediateLoadingStrategy :

    private class ImmediateLoadingStrategy extends LoadingStrategy {
@Override
protected void onLoadFinished(GraphObjectPagingLoader<GraphUser> loader, SimpleGraphObjectCursor<GraphUser> data) {
super.onLoadFinished(loader, data);
// We could be called in this state if we are clearing data or if we are being re-attached
// in the middle of a query.
if (data == null || loader.isLoading()) {
return;
}
if (data.areMoreObjectsAvailable()) {
// We got results, but more are available.
followNextLink();
} else {
// We finished loading results.
hideActivityCircle();

// If this was from the cache, schedule a delayed refresh query (unless we got no results
// at all, in which case refresh immediately.
if (data.isFromCache() && initialLoad==true) {
loader.refreshOriginalRequest(data.getCount() == 0 ? CACHED_RESULT_REFRESH_DELAY : 0);
}
}
}
}

注意添加的检查 && initialLoad==true - 这 (a) 确保如果这是第一次显示好友列表,则更新好友列表,并且 (b) 如果在应用程序运行期间已经显示过一次,则不会刷新。这可确保之前选择的 friend 保持选中状态。

如果有人有更好的解决方案,我很想听听:)

关于Android - Facebook SDK - FriendPicker setSelected 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25741905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com