کلیدستان

نسخه‌ی کامل: مشکل در R.Drawable (در برنامه نویسی اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام

من یک متغیر Global در Activity اول که مربوط به یک عکس در پوشه drawable است

کد پی‌اچ‌پی:
    public static class Global {
        public static 
int newimag R.drawable.asddsa ;
        
    } 

حال من با رفتن یه یک Activity جدید میخواهم که R.drawable  رو عوض کنم و اون imageview در Activity جدید با عکسی که من در Global.newimag قرار دادم باز شود

کد پی‌اچ‌پی:
//    String  a= "R.drawable."+String.valueOf(position); // چون رشته هست قبول نمیشه
                
String  c"num"+String.valueOf(position);//چون از گرید ویو استفاده میکنم نام عکسها به صورت

                
int bgetResources().getIdentifierc"drawable"getPackageName());


                Global.
newimag b;
                Toast.makeText(getApplicationContext(), Toast.LENGTH_SHORT).show();//  خروجی گرفتم دیدم به جای R.drawable.num0
                                                                                       // به این صورت است res/drawable/num0 

و وقتی اکتیویتی جدید باز بشه stop میشود

code activity2

کد پی‌اچ‌پی:
resazedr BitmapFactory.decodeResource(getResources(),
                    Global.
newimag).copy(Bitmap.Config.ARGB_8888true); 
سلام.
توصیه می کنم خطایابی کنید :

کلید شماره 813

مدیر عزیز 
من خطایابی میکنم مشکل حل نمیشه

فقط من به دنبال تبدیل   res/drawable/num0 

به    R.drawable.num0  هستم البته باید به صورت int باشه

ممنون میشم  اگه راهنمایی کنید
سلام
هر عکسی یه id داره که از نوع int هست.
شما می تونی با استفاده از کد زیر اون رو بدست بیاری و ازش استفاده کنی

کد پی‌اچ‌پی:
Toast.makeText(getApplicationContext(), R.drawable.num0 Toast.LENGTH_LONG).show(); 

این کد بعد از اجرای برنامه id اون عکس رو میده
سلام دوست عزیز

مشکل من همینه که من id رو به صورت res/drawable/num0 دارم

ولی به صورت R.drawable.num0 (البته به صورت int میخوام) که بتونم برای bitmap استفاده کنم
من کدهاتون رو خوندم، فکر می کنم شما در بحث تعریف متغیرها به صورت Global و با استفاده از Class ، اشتباه عمل می کنید. ما وقتی متغیری را با Class تعریف می کنیم، نمی توانیم آن را تغییر بدهیم. یعنی تنها در صورتی که یکی شیء (object) از آن کلاس (Class) بسازید، آنگاه می توانید مقدار آن متغیر را برای شیء ساخته شده تغییر بدهید، نه برای کلاس اصلی.
مثلا کلید شماره 343 را بخوانید. در آن، کلاس را به صورت زیر تعریف کرده ایم :

کد پی‌اچ‌پی:
public class Globals extends Application {

    public 
String myText "text";



بعد دریافت مقادیر در سایر کلاس ها (از جمله Activity ها) به صورت زیر است :

کد پی‌اچ‌پی:
Globals global = new Globals();
String mt = global.myText

اکنون فرض کنید که در یک Activity دلخواه، کد زیر را می نویسیم :

کد پی‌اچ‌پی:
Globals global = new Globals();
String str = global.myText;
        
global.
myText "another text";
        
Globals global_2 = new Globals();
String str_2 global_2.myText

متغیر str_2 حاوی همان مقدار تعریف شده در کلاس اصلی (یعنی text) می باشد. یعنی کد زیر، تنها برای شیء با نام global ، مقدار متغیر را تغییر می دهد :

کد پی‌اچ‌پی:
global.myText "another text"

با توجه به توضیحاتی که دادم، حدس می زنم با کد زیر که در کدهایتان نوشته اید، فرض کرده اید که مقدار متغیر تغییر داده شده :

کد پی‌اچ‌پی:
Global.newimag b

اما باید توجه داشت که نمی توانیم مقدار تعریف شده در کلاس اصلی را تغییر بدهیم (که بعد انتظار داشته باشیم که با ساخت شیء های جدید در Activity های دیگر، مقادیر جدید در آنها وجود داشته باشد).
البته چون کدهاتون رو چون ناقص دیدم، این محتمل ترین موردی بود که به ذهنم رسید.

ممنون از زحمات شما من از گلوبال خیلی استفاده میکنم

برای imageview هیچ مشکلی نداره 

دقت کنید

activity دوم

کد پی‌اچ‌پی:
        Globala.img = (ImageViewfindViewById(R.id.imasdf);
    
        
Globala.img.setImageResource(Global.newimag); 

activity اول

کد پی‌اچ‌پی:
String alibaba "num"+String.valueOf(position);
                
int alipop getResources().getIdentifieralibaba "drawable"getPackageName());
       
                Global.
newimag alipop

به درستی کار میکند 
چرا؟  (چون برای ایمیج ویو میتوان از دو نوع ادرس دهی  [که در کل یکی هستند]  ) چه از res/drawable/num0  یا R.drawable.num0 استفاده شود کار میکند



اما  برای ساخت bitmap فقط R.drawable.num0  قابل قبول است

کد پی‌اچ‌پی:
resazedr BitmapFactory.decodeResource(getResources(),
                    
R.drawable.num0).copy(Bitmap.Config.ARGB_8888true); 

چه کنم؟
سلام
شما این کد رو می زنی چی بهت میده؟
کد پی‌اچ‌پی:
Toast.makeText(getApplicationContext(), R.drawable.num0 Toast.LENGTH_LONG).show(); 
من هر جای برنامه این رو می زنم بهم id عکس num0 که در drowable ریختم رو میده.مثلا 2130968583
بعد من این ای دی رو در برنامه استفاده می کنم
اره میدونم چی میگید شما 

ولی میگم که  
برای ساخت bitmap فقط  R.drawable.num0  قابل قبول است

من هرچی بود رو امتحان کردم

شما خودتون هم میتونید امتحان کنید
کد پی‌اچ‌پی:
resazedr BitmapFactory.decodeResource(getResources(),
                    
R.drawable.num0).copy(Bitmap.Config.ARGB_8888true); 
به جای  R.drawable.num0 هر چی دیگه بذارید قبول نمیکنه