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

راهنمایی در ایجاد لیستنر

SaeiD-as  10 سال پیش  10 سال پیش
0 0

سلام دوستان

تا بحال بسیار نیاز به استفاده از لیستنر داشته ام اما هنوز نتونستم یک لیستنر بنویسم!!

داخل یک اکتیویتی یک باتن دارم، با کلیک روی باتن شمارنده ای شروع به حرکت میکنه، میخوام زمانی که مثلا شمارنده به عدد ده رسید داخل اکتیویتی دیگه یه تابع اجرا بشه، ممنون میشم با یک مثال ساده یک لیستنر برام بنویسید تا نحوه ایجاد لیستنر دستم بیاد

با تشکر

0 0
(10 سال پیش)
0 0
(10 سال پیش)
0 0
لطفا یک نظری، پندی، نصیحتی بکنین دوستان (10 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
Morteza  10 سال پیش
+1 0

سلام

من فرض را روی این گذاشتم که منظور شما از شمارنده یک تایمر هست :
این کد تایمر :

  final Thread thread = new Thread(new Runnable() {

@Override
public void run() {
int count = 0;
while (true) {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
count++;
if (count == 10) {
Intent intent = new Intent(ActivityMain.this, ActivityDoWork.class);
intent.putExtra("RUN_FUNCTION", true);
ActivityMain.this.startActivity(intent);
ActivityMain.this.finish();
}
}
}
});

این هم کد Listener که روی یک Button ست کردم :

 btnStartCount.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
thread.start();
}
});

این هم کد دریافت دستور اجرای تابع در اکتیویتی مورد نظر :

  Bundle extras = getIntent().getExtras();
if (extras != null) {
if (extras.containsKey("RUN_FUNCTION")) {
if (extras.getBoolean("RUN_FUNCTION")) {
function();
}
}
}

که function تابع مورد نظر ما است.

0 0
مرسی از راهنماییتون اما من میخوام خودم یه لیستنر بنویسم نه از تابع setOnClickListener استفاده کنم (10 سال پیش)
0 0
چرا باید یه همچین کاری کنید وقتی تابعش وجود داره؟ (10 سال پیش)
0 0
خب من اینجا یک مثال زدم، فقط میخوام با نحوه لیستنر نوشتن آشنا بشم، کاری که واقعا میخوام بکنم اینه، من یک لیست ویو دارم، داخل آداپتر یک Button قرار دادم، داخل اکتیویتی اصلی که لیست ویو تمام آیتم هاش نشون داده میشه، کنار لیست ویو یک تکست دارم و میخوام یک لیستنر بنویسم که زمانی که روی Button کلیک شد اون تکست آپدیت شه (10 سال پیش)
0 0
شما برای هر ایتم (هر سطر) داخل لیست ویو یک button دارید ؟ text شما بیرون لیست ویو تعریف شده ؟ (10 سال پیش)
0 0
بله، تکست داخل همون اکتیویتی تعریف شده که لیست ویو ست شده، داخل هر آیتم هم یه Button دارم (10 سال پیش)
پاسخ به سوال 
Morteza  10 سال پیش
+1 0

سلام

من روش زیر به ذهنم رسید که تست هم کردم جواب داد ،البته حتما روش های دیگری هم هست:

در داخل کلاس آداپتر ،فیلد و متد زیر را اضافه کنید :

 private TextView textView;

 public void setTextView(TextView textView) {
this.textView = textView;
}

تکه کد زیر را هم در داخل متد fill اضافه کنید :

           btnSetText.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (textView != null) {
textView.setText(item.title);
}
}
});

تکه کد زیر را هم به اکتیویتی که آداپتر و لیست ویو را تعریف کردید اضافه کنید ،بعد از تعریف آداپتر :

 adapter.setTextView(txtCaption);

0 0
دمت گرم داداش، متد txtCaption که من تعریف کردم int هست و ایراد میگیره که تبدیلش کن به TextView یا تابع setTextView رو به int تبدیل کن! (10 سال پیش)
0 0
int ؟!!!! txtCaption اسم textView ما هست که قراره متنش تغییر کنه ؛من فکر کنم که شما باید بیشتر روی مفاهیم پایه اندروید تمرکز کنید (10 سال پیش)
0 0
ببخشید من تکستم اینتیجر تعریف شده، داخل اکتیویتی که لیست ویو ست شده تکست مقدارش عوض میشه، شما داخل button که توی متد fill تعریف کردید setText کردید، حالا من چطوری اون عدد رو بگم اینجا ست کنه؟ یکم گیج شدم! (10 سال پیش)
0 0
منظورم از اینکه int تعریف شده اینه که متنی که داخله textView تعریف شده int هست، خب شما داخل آداپتر SetText کردید من این مقدار int که داخل اکتیویتی اصلی مقدار دهی میشه و مقدارش عوض میشه رو چطوری اونجا تغییر بدم (10 سال پیش)
0 0
مشکلمو جور دیگه ای حل کردم، به این صورت که یه متغیر داخل کلاس G تعریف کردم و داخل اکتیویتی که لیست ویو ست میشه مقدار دهیش کردم، بعد داخل متد fill گفتم اگه کلیک شد مقدارشو بخون و به متغیری که در کلاس G تعریف شده اضافه کن و سپس setText کن، این روش جواب داد اما راه حل زیبایی نیست و مطمئنا میتونستم با یک لیستنر ساده (که بلد نشدم چطوری بنویسمش!!!) راحتتر و اصولی تر جواب بگیرم، دوستان اگه کسی راه حل بهتری سراغ داره ممنون میشم بگه (10 سال پیش)
+1 0
پس بزارید یکم سوالتون رو شفاف تر کنیم...شما یه مقدار عددی در اکتیویتی که لیست ویو درآن تعریف شده دارید حالا میخواید هر بار که بر روی button موجود در هر سطر لیست ویو کلیک شد (یعنی توی متد fill) مقدار عددی شما در TextView ست بشه؟درسته؟ هرجاشو اشتباه گفتم خواهشا دقیق توضیح بدید (10 سال پیش)
0 0
درسته مرتضی جان، کاملا هدف من همینه (10 سال پیش)
پاسخ به سوال 
Morteza  10 سال پیش
+2 0

فکرکنم با کد زیر مشکلتون حل بشه :

کد زیر را به اکتیویتی اضافه کنید :

    private static int value;


public static int getValue() {
return value;
}

در کد پست بالا هم ،کد زیر را :

 textView.setText(item.title);

به :

 textView.setText("" + ActivityMain.getValue());

تغییر بدید.

value را در اکتیویتی هرجا که بخواید میتونید مقدار دهی کنید.

البته این روشی بود که به ذهن من رسید حتما راه های بهتری هم هست

0 0
مرسی رفیق، این روش خیلی بهتر از روشی هست که خودم استفاده کرده بودم، چیزی که متوجه شدم اینه که لازم نیست زیاد به فکر نوشتن لیستنر باشم، راه حل های بهتر و راحتتری هم هست :) (10 سال پیش)

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