انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در Shared Preferences (ذخیره تصویر پس زمینه layout) (برنامه نویسی اندروید)

مشکل در Shared Preferences (ذخیره تصویر پس زمینه layout) (برنامه نویسی اندروید)

#1
سلام 
یه مشکلی با این برنامه پیدا کردم
میخوام وقتی یه تصویری رو از گالری میگیرم بندازمش بکگراند یه لینیر لایوت
خوب تا اینجاش که هیچی
ولی وقتی میخوام اینو ذخیره کنم که دفعه بعدم که میام همون تصویره همچنان بکگراند بمونه
بر میگرده همون پیش فرض
یه نکته ایم بگم که صفحه تنظیمات برنامم هست و اطلاعات رو به صفحات دیگه میفرستم یعنی باید توی اکتیویتی های دیگه از این تصویر بعنوان بکگراند لینیر لایوتم استفا ده کنم

اینم کدش

کد:
Integer[] imageIDs = {
           R.drawable.background2,
           R.drawable.img_bdeff,
           R.drawable.imgb_9nomreie,
           R.drawable.imgb_5dolar,
           R.drawable.imgb_andaki_sabr,
           R.drawable.imgb_chomanaiamouravad,
           R.drawable.imgb_emamreza
   };

SharedPreferences shFont , shBack ;
LinearLayout sasa;
int position;


protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_new_sett);

sasa = (LinearLayout) findViewById(R.id.myLinearLayout);
Gallery gallery = (Gallery) findViewById(R.id.gallery1);
       gallery.setAdapter(new ImageAdapter(this));
       gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
               // display the images selected
               sasa.setBackgroundResource(imageIDs[position]);
               //imageView.setImageResource(imageIDs[position]);
           }
       });

shBack = getSharedPreferences("settingBack", 0);
       position = shBack.getInt("back?", 0);// pishfars background aval

sasa.setBackgroundResource(imageIDs[position]);


public class cOnItemSelectedListener implements OnItemSelectedListener {

       @Override
       public void onItemSelected(AdapterView<?> parent, View arg1, int post,
                                  long id) {
           
           sasa.setBackgroundResource(imageIDs[position]);

       }

@Override
       public void onNothingSelected(AdapterView<?> arg0) {
           // TODO Auto-generated method stub

       }

   }
   @Override
   protected void onPause() {
       // TODO Auto-generated method stub
       super.onPause();
    SharedPreferences.Editor ed2 = shBack.edit();
       ed2.putInt("back?", position);
       ed2.commit();
       sasa.setBackgroundResource(imageIDs[position]);
   }
public class ImageAdapter extends BaseAdapter {
       private Context context;
       private int itemBackground;
       public ImageAdapter(Context c)
       {
           context = c;
           // sets a grey background; wraps around the images
           TypedArray a =obtainStyledAttributes(R.styleable.MyGallery);
           itemBackground = a.getResourceId(R.styleable.MyGallery_android_galleryItemBackground, 0);
           a.recycle();
       }
       // returns the number of images
       public int getCount() {
           return imageIDs.length;
       }
       // returns the ID of an item
       public Object getItem(int position) {
           return position;
       }
       // returns the ID of an item
       public long getItemId(int position) {
           return position;
       }
       // returns an ImageView view
       public View getView(int position, View convertView, ViewGroup parent) {
           ImageView imageView = new ImageView(context);
           imageView.setImageResource(imageIDs[position]);
           imageView.setLayoutParams(new Gallery.LayoutParams(100, 100));
           imageView.setBackgroundResource(itemBackground);
           return imageView;
       }

   }


}
پاسخ

مشکل در Shared Preferences (ذخیره تصویر پس زمینه layout) (برنامه نویسی اندروید)

#2
سلام شما همون موقع که داری عکس رو از گالری بارگیری میکنی باید آدرس محل ذخیره اون عکس رو هم داخل شی sharedPreferences ذخیره کنی بعد از دفعه اول که کاربر عکس رو انتخاب میکنه از روی آدرس ذخیره شده عکس رو بخونه 

کد پی‌اچ‌پی:
public class ImagePicker extends Activity {

 
   @Override
    protected void onCreate
(Bundle savedInstanceState) {
 
       super.onCreate(savedInstanceState);
 
       setContentView(R.layout.activity_selected_images);
 
       setTitle("");

 
       Button imgPicker = ...;
 
       imgPicker.setOnClickListener(new View.OnClickListener() {
 
           @Override
            public void onClick
(View view) {
 
               Intent getImageFromGalleryIntent =
 
                       new Intent(Intent.ACTION_PICKMediaStore.Images.Media.INTERNAL_CONTENT_URI);
 
               startActivityForResult(getImageFromGalleryIntent0);
 
           }
 
       });
 
   }
 
   
    
@Override
    protected void onActivityResult
(int requestCodeint resultCodeIntent data) {
 
       super.onActivityResult(requestCoderesultCodedata);
 
       SharedPreferences pref getSharedPreferences("images"MODE_PRIVATE);
 
       SharedPreferences.Editor editor pref.edit();
 
       if (resultCode == Activity.RESULT_OK && data != null) {

 
           String imagePath getPath(data.getData());
 
           editor.putString("imgPath"imagePath);
 
           editor.apply();
 
           
        
}
 
   }

 
   public String getPath(Uri uri) {
 
       String[] projection = {MediaStore.Images.Media.DATA};
 
       Cursor cursor managedQuery(uriprojectionnullnullnull);
 
       startManagingCursor(cursor);
 
       int column_index cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
 
       cursor.moveToFirst();
 
       return cursor.getString(column_index);
 
   }


با اجرای کد بالا آدرس عکس تو یه رشته ذخیره میشه و هر وقت خواستی میتونی با کد زیر عکس رو بندازی تو بکگراند(API 16 به بالا) :

کد پی‌اچ‌پی:
LinearLayout l = new LinearLayout(context);
 
       l.setBackground(Drawable.createFromPath(pref.getString("imgPath",null))); 

اما نکته ای که هست اینه که با اجرای اکتیوتی مورد نظر باید چک کنیم که کاربر عکسی انتخاب کرده یا نه
اگر انتخاب کرده باشه داخل شی shared یه استرینگ ذخیره شده اگه نه هیچ مقداری نداریم (null) 
پس داخل متد onCreate اکتیوتی یه شرط میذاریم :

کد پی‌اچ‌پی:
if (pref.getString("imgPath",null)!=(null)){
 
           LinearLayout l = new LinearLayout(context);
 
           l.setBackground(Drawable.createFromPath(pref.getString("imgPath",null)));
 
       

ضمنا مجوز خواندن از فایل رو هم فراموش نکنید
پاسخ
 سپاس شده توسط ze_ca ، admin

مشکل در Shared Preferences (ذخیره تصویر پس زمینه layout) (برنامه نویسی اندروید)

#3
فقط برای اینکه موضوع رو ببندم میگم
مشکل کد بالا(کدی که خودم گذاشتمو پیدا کردم)
دو جا علامت سوال(؟) نزاشته بودم
و چون داخل دابل کوتیشن ("") بود
واسه همین ارور نمی گرفت
با تشکر
پاسخ
 سپاس شده توسط admin ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان