PDA

View Full Version : مشکل در textview



bhar1387
جمعه 03 آذر 1391, 17:40 عصر
سلام
یه مشکلی برام پیش اومده
من 50تا textview توی layout قرار دادم حالا میخوام توی یه کلاس یه for بنویسم و رشته همه textview هارو توسط متد settext تنظیم کنم تا حالا چیزی پیدا نکردم البته میشه رشته textview هارو به صورت تک تک با دستور




textview tv =(textview) findviewbyid (r.nayout.textview); tv.settext("ggfggf");//for on textview


انجام داد ولی کد طولانی میشه خواهشن اگه کسی بلده کمک کنه با تشکر

shahin bahari
جمعه 03 آذر 1391, 17:57 عصر
سلام
میتونید textView ها رو به صورت یه آرایه تعریف کنید و توی حلقه تکست اون ها رو عوض کنید. البته ID دادن بهشون رو جدا باید انجام بدید.
به نظر من کلا صورت مساله شما مورد داره! بهتره یه Custom list view درست کنید و تمام textview ها رو عضو این لیست کنید.اینجوری هم ساده تر میشه و هم برنامه efficient تر هست.

bhar1387
جمعه 03 آذر 1391, 21:58 عصر
با تشکر از وقتی که گذاشتین مشکل اینجاست که textview همشون به صورت کد xml ایجاد شدن و تنها راه دستکاری اونها از طریق متد findviewbyid امکان پذیره (به نظر من)
دنبال یه کدی هستم که کار کد اشتباه زیر و انجام بده

for(i=1;i<=50;i++){

textview tv =(textview) findviewbyid (r.layout.textview[i]);

tv.settext("ggfggf");}

saeidpsl
شنبه 04 آذر 1391, 01:29 صبح
بفرما :چشمک:

ViewGroup parent = dialog.findViewById(R.id.parent);
String commonPrefix = "prefix";
for (int i=0; i<arrayList.size(); i++){
TextView t = (TextView) parent.findViewWithTag(commonPrefix+i);
t.setText(arrayList.get(i));
}

http://stackoverflow.com/questions/10320274/dynamically-changing-textviews-with-a-for-loop
http://developer.android.com/guide/topics/ui/layout/listview.html

Ghadiri_S
شنبه 04 آذر 1391, 10:25 صبح
سلام دوست عزیز، مطلبی رو که اینجا میخوام بنویسم نمیدونم تا چه اندازه اصولی هست. اما دقیقا مشکلی رو که بهش اشاره کردی برطرف میکنه. امیدوارم که کارامد باشه.

همون طور که اشاره کردی به کمک findViewById می تونیم تک تک EditText ها رو فراخوانی کنیم و بعد مقدارشون رو بخونیم و یا تغییر بدیم. که ظاهرا به کمک یک حلقه نمیشه این کار رو انجام داد. اما نکته اینجاست که دستور findViewById بر اساس id کنترل ها رو پیدا میکنه و این id از نوع int هست. پس اگر id کنترل ها رو بصورت عددی داشته باشیم و این id ها پشت سر هم باشند کار حل شده هست.

کاری که باید اجام بشه این هست که شما داخل layout خودت 50 تا EditText رو پشت سر هم اضافه کن . حالا تو بخش سمت چپ همون Pakage Explorer برو تو پوشه gen داخلش یک پکیج با نام پروژت هست اون رو باز کن و داخل اون هم یک یک فایلی هست به نام R.java که اگر بازش کنی میبینی ای دی عددی تمام کنترل ها رو اونجا بصورت hex نوشته. برای مثال من تو layout خودم یک دکمه 3 تا EditText و یک دونه ViewText گذاشتم. کد فایل R.java به شکل زیر هست.



public static final class id {
public static final int button1=0x7f070001;
public static final int editText1=0x7f070002;
public static final int editText2=0x7f070003;
public static final int editText3=0x7f070004;
public static final int menu_settings=0x7f070005;
public static final int textView1=0x7f070000;


خوب EditText های مورد نظر من ای دی عددیشون هست 0x7f070002 و 0x7f070003 و 0x7f070004 خوب داخل برنامه من تو کد کلیک دکمه کافیه دستور زیر رو داشته باشم تا هر وقت دکمه رو کلیک کردم متن داخل هر 3 تا عوض بشه.



for (int i = 1 ; i < 4 ; i++){
int temp = 0x7f070001+i;
EditText txt = (EditText) findViewById(temp);
txt.setText("hi"+Integer.toString(i));
}


فقط یک نکنه!!! نباید مقادیر درون R.java رو تغییر بدی چون ممکنه تو عملکرد برنامه با مشکل مواجه بشی. پس بنظر من فقط از اطلاعات درونش استفاده کن بدون اینکه دستکاریشون بکنی

البته یک راه دیگه هم هست که نیاز نباشه بری سراغ پوشه gen شما اگه همه EditText ها رو پشت سر هم تو Layout انداخته باشی می تونی مطمعن باشی که ای دی همشون پشت سر هم هست. پس فط کافی مقدار آی دی EditText اول و آخر رو در بیاری بعد بقیه رو بر اساس اون محاسبه کنی مثل کد زیر



int start = R.id.editText1;
int finish = R.id.editText3;

for (int i = start ; i <= finish ; i++){
EditText txt = (EditText) findViewById(i);
txt.setText("hi "+Integer.toString(i));
}

موفق و پیروز باشی

bhar1387
شنبه 04 آذر 1391, 14:58 عصر
با تشکر از هردو تا پست مشکل حل شد
خیلی حال دادین

Modernidea
یک شنبه 05 آذر 1391, 00:54 صبح
خوب EditText های مورد نظر من ای دی عددیشون هست 0x7f070002 و 0x7f070003 و 0x7f070004 خوب داخل برنامه من تو کد کلیک دکمه کافیه دستور زیر رو داشته باشم تا هر وقت دکمه رو کلیک کردم متن داخل هر 3 تا عوض بشه.

[CODE]
for (int i = 1 ; i < 4 ; i++){
int temp = 0x7f070001+i;
EditText txt = (EditText) findViewById(temp);
txt.setText("hi"+Integer.toString(i));
}

موفق و پیروز باشی

سلام دوست عزیز،
فکر نمیکنم همیشه ID های View هایی که پشت سر هم ایجاد شده به صورت مرتب و پشت سره هم باشه، هست؟
حتی اگر پروژه را Clean کنیم و دوباره Build کنیم باز هم ID های به صورت پشت سر هم تولید میشه؟


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

bhar1387
یک شنبه 05 آذر 1391, 21:09 عصر
سلام
من هم قبلن فکر میکردم که با هر بار اجرای کد محتوای کلاس R تغییر میکنه
ولی تا حالا چند بار clean کردم چند بارهم اجرا id های مربوط به هر element بدون تغییر موندن حتی id بعضی هاشون رو هم دستی تغییر دادم فعلا مشکلی به وجود نیومده(توی eclips)
حتی اگه id های پشت سرهم تولید نشه میشه بادست کاری کلاس R پشت سرهمشون کرد