2012-08-03 13 views
5

Tengo una preferencia personalizada con una imagen y dos textos y necesito cambiar la imagen mediante programación.Cómo administrar el diseño de preferencias personalizadas

Puedo obtener la vista de preferencias personalizadas y encontrar el ImageView en el diseño usando findViewById, pero si trato de cambiar la imagen, esto no funciona.

¿Me equivoco?

preferencia de presentación de

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 


    <ImageView 
     android:id="@+id/imageforfacebook" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:padding="5dip" 
     android:src="@drawable/icon" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+android:id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:fadingEdge="horizontal" 
      android:singleLine="true" 
      android:text="titolo" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:textSize="18sp" /> 

     <TextView 
      android:id="@+android:id/summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@android:id/title" 
      android:layout_below="@android:id/title" 
      android:maxLines="2" 
      android:text="descrizione" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 
    </LinearLayout> 

</LinearLayout> 

CÓDIGO para cambiar el contenido IMAGEVIEW

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

View v = (View) prefs_facebookimage.getView(null, null); 
ImageView img = (ImageView) v.findViewById(R.id.imageforfacebook); 
Uri uri = Uri.parse(path); 
img.setImageURI(uri); 

Respuesta

0

¿Qué pasaría si todas las imágenes según Resol/dibujable y luego acceder a ellos a través R.drawable. ? Este enfoque siempre me ha funcionado. Si no tiene razones convincentes para usar el URI, vale la pena intentarlo. Incluso si tiene que usar URI, sugeriría probar este enfoque y ponerlo en funcionamiento. Entonces, al menos, sabría que hay algo mal con el valor de la 'ruta' y no con su implementación en general.

+0

No puedo usar la solución dibujable, ya que la imagen se seleccionará desde la cámara o tarjeta SD y puede cambiar en cualquier momento que el usuario lo desee. El código resuelve la preferencia, también he intentado cambiar algo de texto en mi diseño personalizado y después de llamar a setText ("newText"); durante la depuración, TextView tiene el nuevo texto, pero una vez que termina, regresa como original. – Giuseppe

6

me trataron getView rutina pero no funciona para mí, por fin llegué a través de una costumbre Preference:

public class ImageViewPreference extends Preference { 
    private ImageView mImageView; 
    private Bitmap mPhoto; 

    public ImageViewPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.setWidgetLayoutResource(R.layout.pref_account_image); 
     if (mPhoto == null) { 
      mPhoto = BitmapFactory.decodeResource(
        getContext().getResources(), R.drawable.icon); 
     } 
    } 

    @Override 
    protected void onBindView(View view) { 
     super.onBindView(view); 
     mImage = (ImageView) view.findViewById(R.id.pref_imageView); 
     mImage.setImageBitmap(mPhoto); 
    } 

    public void setImage(Intent imageData) { 
     mPhoto = data.getParcelableExtra("data"); 
    } 
} 

y aquí está la Preference.xml:

Y llame al mImagePref.setImage para cambiar su ImageView en el método de devolución de llamada onPreferenceClick.

¡Deseo que ayude! Buena suerte.

+0

Encontré que 'findViewById()' todavía no funcionaba en 'onBindView()'. Lo hice en 'onCreateView()', que funcionó. – ryan

+0

@ryan eso es extraño. No estoy teniendo este problema y la documentación dice 'Este es un buen lugar para obtener referencias a Vistas personalizadas en el diseño y establecer propiedades sobre ellas". http://developer.android.com/reference/android/preference/Preference.html#onBindView%28android.view.View%29 – Sufian

Cuestiones relacionadas