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);
It's still possible to customise the appearance of a Preference item though. In your XML you have to declare the root element as android:id="@android:id/widget_frame , and then declare TextView as android:title and android:summary . You can then declare other elements you want to appear in the layout.
Stay organized with collections Save and categorize content based on your preferences. In Compose, UI elements are represented by the composable functions that emit a piece of UI when invoked, that is then added to a UI tree that gets rendered on the screen.
From the menu bar, click File > Settings (on macOS, click Android Studio > Preferences).
A PreferenceFragmentCompat is the entry point to using the Preference library. This Fragment displays a hierarchy of Preference objects to the user. It also handles persisting values to the device. To retrieve an instance of android.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With