2012-08-03 14 views
5

मेरे पास एक छवि और दो टेक्स्ट के साथ एक कस्टम वरीयता है और मुझे प्रोग्राम को प्रोग्रामेटिक रूप से बदलने की आवश्यकता है।कस्टम वरीयता लेआउट का प्रबंधन कैसे करें

मैं कस्टम वरीयता दृश्य प्राप्त करने और findViewById का उपयोग कर लेआउट में ImageView को खोजने में सक्षम हूं, लेकिन अगर मैं छवि को बदलने की कोशिश करता हूं तो यह काम नहीं करता है।

क्या मुझे कुछ गलत है?

वरीयता लेआउट

<?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> 

कोड 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); 

उत्तर

0

बदलने के लिए क्या होगा यदि आप रेस/drawable के तहत सभी छवियों को रखा और फिर R.drawable के माध्यम से उन तक पहुंचें। ? इस दृष्टिकोण ने हमेशा मेरे लिए काम किया है। यदि आपके पास यूआरआई का उपयोग करने के लिए अनिवार्य कारण नहीं हैं तो यह दृष्टिकोण प्रयास करने लायक हो सकता है। भले ही आपको यूआरआई का उपयोग करना पड़े, मैं इस दृष्टिकोण का परीक्षण करने और इसे काम करने का सुझाव दूंगा। फिर कम से कम आप जानते होंगे कि 'पथ' के मूल्य में कुछ गड़बड़ है और सामान्य रूप से आपका कार्यान्वयन नहीं है।

+0

मैं ड्रॉबल समाधान का उपयोग नहीं कर सकता क्योंकि छवि कैमरे या एसडीकार्ड से ली जाएगी और यह किसी भी समय उपयोगकर्ता को बदल सकती है। कोड वरीयता से बाहर काम करता है, मैंने अपने कस्टम लेआउट में कुछ टेक्स्ट बदलने की कोशिश की है, और जब मैं setText ("newText") को कॉल करता हूं; डीबग के दौरान टेक्स्ट व्यू में नया टेक्स्ट होता है, लेकिन एक बार खत्म होने पर यह मूल के रूप में वापस आता है। – Giuseppe

6

मैं getView दिनचर्या की कोशिश की लेकिन यह मेरे लिए काम नहीं करता है, अंत में मैं इसे माध्यम से एक कस्टम 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"); 
    } 
} 

और यहाँ Preference.xml है:

और कॉलबैक विधि onPreferenceClick में अपने ImageView को बदलने के लिए mImagePref.setImage पर कॉल करें।

मेरी इच्छा है कि यह मदद करता है! सौभाग्य।

+0

मैंने पाया कि 'findViewById()' अभी भी 'bindView() 'में काम नहीं किया है। मैंने इसे 'क्रिएटिव व्यू()' में किया, जिसने काम किया। – ryan

+0

@ryan कि अजीब है। मुझे यह समस्या नहीं है और प्रलेखन कहता है 'लेआउट में कस्टम दृश्यों के संदर्भों को पकड़ने और उन पर गुण सेट करने के लिए यह एक अच्छी जगह है।' http://developer.android.com/reference/android/preference/Preference.html#onBindView%28android.view.View%29 – Sufian

संबंधित मुद्दे

 संबंधित मुद्दे