How to manage custom preference layout

android, android-layout

Solution

I tried `getView` routine but it doesn't work for me, finally I got it through with a custom `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");
    }
}

And here is the Preference.xml:

<PreferenceCategory
    android:key="@string/pref_category_myNote_key"
    android:title="@string/pref_category_myNote" >
    <com.flounder.xeniaNote.view.ImageViewPreference
        android:key="@string/pref_image_key"
        android:title="@string/pref_image"
        android:widgetLayout="@layout/pref_account_image" />
</PreferenceCategory>

And call `mImagePref.setImage` to change your `ImageView` in the callback method `onPreferenceClick`.

I wish it helps! Good luck.

Problem

I have a custom preference with an image and two text and I need to change the image programmatically. I am able to get the custom preference view and to find the ImageView in the layout using findViewById, but if I try to change the image this do not work. Do I am wrong something? PREFERENCE LAYOUT ``` <?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> ``` CODE TO CHANGE THE IMAGEVIEW CONTENT ``` @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); ```

Original source