نوشتن یک کد داینامیک برای اتصال اشاره گرهای جاوا به Button ها
آرایه ها رو با توجه به اینکه من خودم کار کردم عالی درس دادید و جایی برای حرف نمیمونه اما سوال من
من راستش با خودم فک کردم گفتم چرا من باید هرباربرای گرفتن دگمه ها و کد نویسیشون findviewbyid رو بزنم لذا یک سری متد نوشتم و آرایه ای ازنوع دکمه که توش دکمه ها رو میریزم ساختم
Button[] BTNS = new Button[]{ b1, b2 };
int[] arrbt = new int[]{ R.id.button1, R.id.button2 };
و بعد یکسری متد برای خواندت آرایه و و و حالا سوال من اینه ... من اومدم و یک کلاس دیگه تعریف کردم و این متد ها روتوش کپی کردم ولی ارور میده .. راسش یکم گیج کننده شد برام برای اینکه وقتی میخواد دکمه ها رو با findviewbyid از توی یک کلاس غیر از راه انداز خودش بخونه ارور میده و مسله دیگه معلوم نیست به کلیک لیسنر کجا حالا گوش میده .. استاد واقعا این مساعل آدمو گیج میکنه .. میتونید بگید چجوری این کلاسو بسازم ؟ میخوام کلاسی بسازم که جون خودمو راحت کتم همیشه اسم دکمه ها یا تکست باکسا رو مسلا بریزم توی یک آرایه بعد بدم به متد یک کلاسی و اون کلاس بیاد لیستنر هاشو تعریف کنه ..
bts[i] = (Button) findViewById(arr[i]);
اما برای این موضوع چجوری متدهای کمکی بنویسیم ( نه از راه Reflection ) کمی طولانی و پیچیده هست، لذا من تنها سر نخ هاش رو برای شما می نویسم و خودتون تکمیلش کنید.
توجه داشته باشید که کدهای زیر همینطوری رو هوا نوشته شده و تست نشده، بنابراین اگر مشکلی داشت خودتون دیباگ کنید ( من فقط می خواستم ایده رو بدم بهتون )
package com.uncocoder.course.app.sample_ui_code;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SampleUICodeActivity extends Activity {
public ArrayListviews = new ArrayList ();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayListnames = new ArrayList ();
names.add("btnSampleButton");
names.add("txtSampleCaption");
names.add("imgSampleImageView");
View parentView = getWindow().getDecorView();
assignViews(parentView, names, views);
assignClickListener(views, new OnClickListener() {
@Override
public void onClick(View v) {
Log.i("LOG", "Click on me: " + v.getId());
}
});
assignText(views, "HELLO!");
}
public static void assignViews(View parentView,
ArrayListnames,
ArrayListtargetViews) {
Context context = parentView.getContext();
for (String name: names) {
int id = context.getResources().getIdentifier(name, "id", context.getPackageName());
targetViews.add(parentView.findViewById(id));
}
}
public static void assignClickListener(ArrayListviews,
OnClickListener onClickListener) {
for (View view: views) {
view.setOnClickListener(onClickListener);
}
}
public static void assignText(ArrayListviews,
String text) {
for (View view: views) {
if (view instanceof TextView) {
((TextView) view).setText(text);
}
if (view instanceof Button) {
((Button) view).setText(text);
}
if (view instanceof EditText) {
((EditText) view).setText(text);
}
}
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .