من یک متغیر سراسری میخوام که در یک اکتیویتی اون رو مقداردهی کنم و در اکتیویتی های دیگه فراخوانیش کنم؛
منتها هر چی مقدار دهی میکنمش وقتی در اکتیویتی های دیگه فراخوانی میکنم فقط بازم مقدار صفر رو بر میگردونه!
چیکار کنم؟
من یک متغیر سراسری میخوام که در یک اکتیویتی اون رو مقداردهی کنم و در اکتیویتی های دیگه فراخوانیش کنم؛
منتها هر چی مقدار دهی میکنمش وقتی در اکتیویتی های دیگه فراخوانی میکنم فقط بازم مقدار صفر رو بر میگردونه!
چیکار کنم؟
یعنی می خواهید یه متغیر public static رو مقدار بدید.!
دوست عزیز متغیر های استاتیک در heap حافظه ذخیره میشن پس بنابراین فقط یکبار مقدار میگیرن البته اگر از نوع داده اولیه باشن پس دیگه نمی تونید از اکتیویتی های دیگه بهش مقدار بدید.!
حالا برای رفع اشکال بهتره که این کار کنید.!
public class MyClass {
private int a ;
public final ObserverValueSet observerValueSet = a -> MyClass.this.a = a;
public final ObserverValueGet observerValueGet = () -> MyClass.this.a;
public MyClass() { }
public interface ObserverValueSet {
void setValue(int a);
}
public interface ObserverValueGet {
int get();
}
}
و تو اکتیویتی ویا هر کلاس دیگه ای هم اینطوری فراخوانی کنید...
MyClass x = new MyClass();
x.observerValueSet.setValue(1);
int o = x.observerValueGet.get();
آخرین ویرایش به وسیله farhad_shiri_ex : چهارشنبه 05 اردیبهشت 1397 در 11:44 صبح
نه همون متغیر سراسری درست گفتید!
منتهی در زبان جاوا چون شی گرایی محض رعایت میشود مثل زبان سی پلاس پلاس نمی تونید یک متغیر Global تعریف کنید ازش استفاده کنید یعنی کلا کار جالبی نیست و قوانین پنهان سازی اطلاعات رو نقض میکنه!
در جواب سوال شما هم کدی که در بالا نوشتم مشکلتون را حل خواهد کرد کافی است که در اکتیویتی که از کاربر عدد را دریافت میکنید کلاسی که در بالا گذاشتم تعریف کنید و بعد هم که نحوه استفاده اش را در اکتیویتی دیگه هم که خیلی سر راست پس به راحتی میتونید هم از اکتیویتی دیگه بهش مقدار بدید و هم مقدار رو بخونید.
فقط فیلدی که به نام a تعریف کردم رو با متغیر خودتون جابجا کنید و البته اینترفیس ها روهم ویرایش کنید که داده شما رو انتقال بدهند.
ببخشید من هنوز سر این موضوع گیرم، اگه میشه کمک کنید کارم راه بیافته، کل اینترنتو گشتم!
الان این کدی که شما گفتین رو سر درنیاوردم!
اگه میشه کدش رو بنویسید و من با همون متغیر ها کپی کنم.