Marcar al usuario seleccionado como se ha activado en FriendPicker (Facebook SDK para Android)

He hecho los tutoriales para el SDK de Facebook para Android (especialmente el "Show Friends" -tutorial ).

¿Cómo puedo marcar a los usuarios seleccionados que he seleccionado antes en PickerActivity cuando hago clic en el botón "Mostrar amigos" de nuevo?

Usted tiene que pasar la cadena separada por coma con los identificadores de usuario de Facebook seleccionados en el paquete a FriendPickerFragment.

Bundle args = new Bundle(); args.putString("com.facebook.android.PickerFragment.Selection", "11111, 2222, 333, already selected facebook ids...."); friendPickerFragment = new FriendPickerFragment(args); 

En la función OnActivityCreated () de PickerFragment, analizará las selecciones de id seleccionadas como seleccionadas en la lista. Puede ver el siguiente código en PickerFragment en FacebookSDK.

 selectionStrategy.readSelectionFromBundle(savedInstanceState, SELECTION_BUNDLE_KEY); 

He mirado el código fuente de Facebook SDK y me parece que PickerFragment no le da la posibilidad de volver a seleccionar los elementos previamente seleccionados. Desde Facebook SDK se publica bajo Apache License 2.0 y tiene acceso a código fuente completo, supongo que podría tratar de modificar PickerFragment de tal manera que tendrá los métodos necesarios.

Aquí está una solución que trabajó para mí. Extiendo un estándar 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; } 

}

Utilizo FriendPickerFragment2 como un normal FriendPickerFragment. En OnCreate, hago lo siguiente:

  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); } 

Aquí selectionUsersString es una cadena de IDs separada por coma.

El último punto es agregar una fila en el OnStart:

 protected void onStart() { super.onStart(); try { friendPickerFragment.loadData(false); friendPickerFragment.showInitialSelection(); } catch (Exception ex) { onError(ex); } } 

Esta solución funcionó para mí.

Buenas noticias. En la versión actual del SDK (3.6) se agregó la siguiente función:

  • Agregó métodos setSelection en FriendPickerFragment para permitir la preselección de amigos.
  • Añadido ejemplo de uso de setSelection API en Friend Picker Sample

FriendPickerFragment tiene este método:

 /** * 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); } 

Y este método:

 public void setSelection(List<GraphUser> graphUsers) { List<String> userIds = new ArrayList<String>(); for(GraphUser graphUser: graphUsers) { userIds.add(graphUser.getId()); } setSelectionByIds(userIds); } 

Debería llamar a uno de estos métodos tan pronto como instanciación fragmento:

  friendPickerFragment = new FriendPickerFragment(args); friendPickerFragment.setSelectionByIds(fbIDs); 
  • Android drawable invalid start tag
  • ¿Cómo cambiar el color presionado a otro color del selector dinámicamente?
  • Android - barra de búsqueda de estilo
  • Android ImageButton estado no cambia
  • Selector de botones de Android
  • Cambio de relleno en el selector
  • Selector de fondo en RecyclerView Item
  • Cómo cambiar el color del texto en la prensa de un textview particular en un linearlayout
  • NullPointerException en el método de mutación de Drawable Android 1.6
  • ListView Sombra de artículo + selector personalizado
  • Selección de un número del usuario con varios números cuando se utiliza el selector de contactos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.