آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نوشتن یک کد داینامیک برای اتصال اشاره گرهای جاوا به Button ها

uncocoder  11 سال پیش  10 سال پیش
+6 0

آرایه ها رو با توجه به اینکه من خودم کار کردم عالی درس دادید و جایی برای حرف نمیمونه اما سوال من
من راستش با خودم فک کردم گفتم چرا من باید هرباربرای گرفتن دگمه ها و کد نویسیشون findviewbyid رو بزنم لذا یک سری متد نوشتم و آرایه ای ازنوع دکمه که توش دکمه ها رو میریزم ساختم


Button[] BTNS = new Button[]{ b1, b2 };
int[] arrbt = new int[]{ R.id.button1, R.id.button2 };



و بعد یکسری متد برای خواندت آرایه و و و حالا سوال من اینه ... من اومدم و یک کلاس دیگه تعریف کردم و این متد ها روتوش کپی کردم ولی ارور میده .. راسش یکم گیج کننده شد برام برای اینکه وقتی میخواد دکمه ها رو با findviewbyid از توی یک کلاس غیر از راه انداز خودش بخونه ارور میده و مسله دیگه معلوم نیست به کلیک لیسنر کجا حالا گوش میده .. استاد واقعا این مساعل آدمو گیج میکنه .. میتونید بگید چجوری این کلاسو بسازم ؟ میخوام کلاسی بسازم که جون خودمو راحت کتم همیشه اسم دکمه ها یا تکست باکسا رو مسلا بریزم توی یک آرایه بعد بدم به متد یک کلاسی و اون کلاس بیاد لیستنر هاشو تعریف کنه ..


bts[i] = (Button) findViewById(arr[i]);



0 0
از سوال و جواب برمیاد پرسشگر یکی دیگه هستش ولی چرا عکس هر دو یکیه؟! (10 سال پیش)
0 0
اتفاقاً خودم هم متوجه این موضوع شدم، نمی دونم چرا اینطوری هست. با توجه به تاریخ سئوال، به نظر میاد به نقل از قول کسی ( آن موقع در لیست نظرات سایت ) خودم نوشته بودم! (10 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
uncocoder  11 سال پیش
+9 0

از نوع طرز فکرت خوشم میاد چرا که اصل برنامه نویسی همین هست. نوشتن الگوریتم هایی که باعث راحت تر شدن کار بشه. اما راه این مساله آرایه نیست و بلکه Reflection هست که در بحث های فوق پیشرفته آموزش داده خواهد شد ( یعنی حالا حالا ها نه ). اما میشه با آرایه ها و کلاس ها انجامش داد. شما به کلاسهایی که می نویسید و متدهاش رو از نوع static قرار می دید و کمک دهنده هستند می گوییم Helper.

اما برای این موضوع چجوری متدهای کمکی بنویسیم ( نه از راه 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 ArrayList views = new ArrayList();


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ArrayList names = 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,
ArrayList names,
ArrayList targetViews) {
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(ArrayList views,
OnClickListener onClickListener) {
for (View view: views) {
view.setOnClickListener(onClickListener);
}
}


public static void assignText(ArrayList views,
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);
}
}
}
}
0 0
این assignClickListener دقیقا چیکار میکنه؟ مگه این نیست که یک بار نوشتن رویداد تاچ و اعمال بر روی کل اعضای آرایه View?  چرا کار نمیکنه؟ و اصرار داره که  DialogInterface  رو ایمپلمنت کنه؟ (10 سال پیش)
0 0
ممنون که بروزش کردید ! ، من ندیده بودمش :| ، اون assignClickListener میاد متغییری از جنس OnClickListener که ورودی تابع هست رو به عنوان ClickListener اون view که به عنوان ورودی تابع هست Set میکنه ! ، منم تست نکردم ، ولی اگه جواب نمیده ، اول view رو به شی مورد نظر که اینجا button هست ، cast کنید ! (10 سال پیش)
0 0
ممنونم . اگه اشتباه نکنم cast کردن که مربوط به اعضای ویو هستش. کل این ویو هم شامل تکست ویو هم باتن و هم ادیت تکست میشه. و فکر کنم اون تابع مربوط به کل ویو میشه. که نمیشه به یه چیز خاص کست کرد. نه؟ (10 سال پیش)
0 0
خیلی متوجه نشدم ! ، اما اگه نوع ویو مشخص نیست ، میتونید یه ورودی به عنوان ویو ای که باید بهش کست بشه ، بگیرید ! ، بازم تست کنید ، شاید اصلا کست کردن مشکلی رو حل نکنه ! (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .