توضیح کد ساده جاوا (اندروید) - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

توضیح کد ساده جاوا (اندروید)

0 امتیاز
public class MainActivity extends Activity {
LinearLayout main;
TextView v;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 main=findViewById(R.id.main);
 v=new TextView(this);
 main.addView(v);
v.setText("after change");
}
}


سوال اینجاست که چرا بعد از فراخوانی تابع setText محتوای ویو عوض میشه در حالی که ویو تو خط قبل به والدش داده شده؟ یعنی برنامه به صورت مکرر والد رو تنظیم میکنه؟

سوال شده بهمن 27, 1399  بوسیله ی مهران رئیسی (امتیاز 25)   1 6 9
ویرایش شده بهمن 27, 1399 بوسیله ی مصطفی ساتکی

1 پاسخ

+1 امتیاز
سلام.دوست عزیز از سوالتون مشخصه که در ابتدای یادگیری اندروید هستید :) متد setText کارش قرار دادن یه متن توی ویو هست.تفاوتی هم نداره که TextView به کدوم layout در صفحه اضافه بشه.کاری که این کد میکنه اینه که یه TextView به layout اصلی صفحه اضافه میکنه و یه متن هم بهش میده(یک بار و نه مکررا !)
پاسخ داده شده بهمن 27, 1399 بوسیله ی ik (امتیاز 571)   1 2 8
علیک سلام ممنون که پاسخ دادید. این رو میدونم منظورم این بود که من هر چی فکر میکنم باید یه متد دیگه تو خط آخر بیاد که از ارزش جدید Text استفاده کنه (محتوای ویو رو تنظیم کنه). در واقع برنامه در اینجا باید مکررا ارزش text جدید رو بخونه و و محتوا رو  عوض کنه. امیدوارم متوجه شده باشید.
ببخشید تو خط آخر متجه نشدم setText متن تکست ویو رو تنظیم می کنه. و به لایوت اضافه میکنه!؟ قبلا که به لایوت اضافه شده؟!
دوست عزیز معمولا از TextView فقط برای نمایش یک متن روی صفحه استفاده میشه.چون مقدارش توسط کاربرقابل تغییر نیست.(البته اگر بخواید میتونید با متد getText مقدارش رو بخونید و ازش استفاده کنید)اگر می خواید مقداری رو از کاربر دریافت کنید می تونید از EditText استفاده کنید.به طور مثال اگه بخواید نام کاربر رو ازش دریافت کنید ، یه EditText روی صفحه میگذارید.حالا کاربر میتونه توی این EditText نامش رو وارد کنه و شما هم توی برنامه با متد getText اون مقدار رو بخونید و مثلا ذخیرش کنید یا هر کاری دیگه ای ...
در مورد سوال دومتون هم ، بنده عرض نکردم که setText چیزی رو به layout اضافه میکنه.بلکه کلیت کدهای بالا رو عرض کردم که هدفش اضافه کردن یک TextView به layout و مقدار دادن به اون TextView هست.
بازم ممنون که دوبازه پاسخ دادید. من کاری با ادیتتکست ندارم فقط فک میکنم یکم درکم از شیگرایی و reference value مشکل دارم اصل سوالم اینه که ممکنه دوتا آبجکت داشته باشیم که و ابجکت اول از طریق یک متد که پارامترش آبجکت دوم هست از آبجکت اول استفاده میکنه و حالا ما مقدار یکی از آتربیوت های آبجکت دوم رو تغییر میدیم آیا توی آبجکت اول تغییر خاصی ایجاد میشه؟
obj.setSomething (obj2) ;
obj2.setAtt("bb");
به طور کلی بستگی به نوع کلاس و سطح دسترسی ها داره.ولی در مورد کد شما آبجکت مورد نظر، یه LinearLayout هست که ماهیتا یه کانتینر(Container) هست.یعنی یه باکس هست که میشه توش آبجکت (= کنترل) های دیگری (مثل TextView,Button ,... یا حتی یه layout دیگه) رو اضافه کرد (مثل GroupBox توی کنترل های دات نت).تغییر مقادیر attribute های آبجکت (کنترل) های داخلش فقط روی همون آبجکت اعمال میشه نه روی Container
جدا از بحث اندروید توی پیام آخر، کد دو خط آخر که گفتم چنین چیزی توی جاوا ممکنه اگه میتونید یه مثال بزنید؟ ممنونم.
...