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?
- Selector hereda
- Deshabilitar el resaltado de GridView de Android completamente (deshabilitar la selección)
- Definición dinámica y uso de selectores
- Pulgar personalizado para un buscador en Android
- Appcompact DialogFragment de una sola opción marca de verificación color
- Android: Cómo hacer un selector desplegable
- Cómo establecer el color de fila alternativo de Listview y el color de fondo del elemento seleccionado
- Android Selector Drawable no funciona con atributos
- El selector ImageView no funciona
- Archivo XML válido da un error "no se pudo analizar" en Android ADT
- Android linearlayout selector de fondo
- Cómo cambiar textColor de un botón de XML en Android?
- Android: ¿por qué no puedo usar un selector para el fondo de TextView?
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);
- ¿Enviar archivos usando el bluetooth android?
- Cómo agregar la clave principal al tipo de datos de texto en android sqlite?