我已经完成了Android 版 Facebook SDK的教程(尤其是“Show Friends”-tutorial)。
当我再次单击“显示朋友”按钮时,如何标记我之前在 PickerActivity 中选择的选定用户?
我已经完成了Android 版 Facebook SDK的教程(尤其是“Show Friends”-tutorial)。
当我再次单击“显示朋友”按钮时,如何标记我之前在 PickerActivity 中选择的选定用户?
我查看了 Facebook SDK 的源代码,在我看来,PickerFragment
您似乎无法重新选择以前选择的项目。由于 Facebook SDK 是在 Apache License 2.0 下发布的,并且您可以访问完整的源代码,我想您可以尝试以PickerFragment
具有必要方法的方式进行修改。
您必须将包中带有选定 facebook 用户 ID 的逗号分隔字符串传递给 FriendPickerFragment。
Bundle args = new Bundle();
args.putString("com.facebook.android.PickerFragment.Selection", "11111, 2222, 333, already selected facebook ids....");
friendPickerFragment = new FriendPickerFragment(args);
在 PickerFragment 的 onActivityCreated() 中,它将解析所选 id 显示为在列表中选择。您可以在 FacebookSDK 的 PickerFragment 中看到以下代码。
selectionStrategy.readSelectionFromBundle(savedInstanceState, SELECTION_BUNDLE_KEY);
这是一个对我有用的解决方案。我扩展了一个标准的 FriendPickerFragment。
public class FriendPickerFragment2 extends FriendPickerFragment {
SelectionStrategy selectionStrategy;
String mPreSelectedIDs;
public FriendPickerFragment2(Bundle args)
{
super(args);
}
@Override
SelectionStrategy createSelectionStrategy() {
selectionStrategy = getMultiSelect() ? new MultiSelectionStrategy() : new SingleSelectionStrategy();
return selectionStrategy;
}
public void showInitialSelection()
{
Bundle bundle = new Bundle();
bundle.putString(this.MULTI_SELECT_BUNDLE_KEY, mPreSelectedIDs);
selectionStrategy.readSelectionFromBundle(bundle, this.MULTI_SELECT_BUNDLE_KEY);
adapter.notifyDataSetChanged();
}
public void setInitialSelection(String IDs)
{
mPreSelectedIDs = IDs;
}
}
我将 FriendPickerFragment2 用作普通的 FriendPickerFragment。在 OnCreate 我执行以下操作:
FragmentManager fm = getSupportFragmentManager();
if (savedInstanceState == null) {
final Bundle args = getIntent().getExtras();
friendPickerFragment = new FriendPickerFragment2(args);
friendPickerFragment.setInitialSelection(pickedUsersString());
fm.beginTransaction()
.add(R.id.friend_picker_fragment, friendPickerFragment)
.commit();
} else {
friendPickerFragment = (FriendPickerFragment2) fm.findFragmentById(R.id.friend_picker_fragment);
}
这里pickUsersString 是一个逗号分隔的ID 字符串。
最后一点是在 OnStart 中添加一行:
protected void onStart() {
super.onStart();
try {
friendPickerFragment.loadData(false);
friendPickerFragment.showInitialSelection();
} catch (Exception ex) {
onError(ex);
}
}
这个解决方案对我有用。
好消息。在当前的 SDK 版本 (3.6) 中,添加了以下功能:
- 在 FriendPickerFragment 上添加了 setSelection 方法以允许预选朋友。
- 在 Friend Picker Sample 中添加了 setSelection API 的使用示例
FriendPickerFragment 有这个方法:
/**
* Sets the list of friends for pre selection. These friends will be selected by default.
* @param userIds list of friends as ids
*/
public void setSelectionByIds(List<String> userIds) {
preSelectedFriendIds.addAll(userIds);
}
而这个方法:
public void setSelection(List<GraphUser> graphUsers) {
List<String> userIds = new ArrayList<String>();
for(GraphUser graphUser: graphUsers) {
userIds.add(graphUser.getId());
}
setSelectionByIds(userIds);
}
您应该在片段实例化后立即调用这些方法之一:
friendPickerFragment = new FriendPickerFragment(args);
friendPickerFragment.setSelectionByIds(fbIDs);