Here is a solution which worked for me. I extend a standard 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;
}
}
I use FriendPickerFragment2 as a normal FriendPickerFragment. In OnCreate I do the following:
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);
}
Here pickedUsersString is a coma separated string of IDs.
The last point is to add one row in the OnStart:
protected void onStart() {
super.onStart();
try {
friendPickerFragment.loadData(false);
friendPickerFragment.showInitialSelection();
} catch (Exception ex) {
onError(ex);
}
}
This solution worked for me.