بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل در ارتباط بین Activity و AlertDialog بوسیله interface

مدیریت گفتگو
Spirit 12 سال پیش
آخرین تغییر: 10 سال پیش

در یک اکتیویتی با نمایش یک AlertDialog کاربر داخل اون میتونه یه عدد رو انتخاب کنه ، بعد با زدن دکمه dismiss کننده AlertDialog باید اون عدد بوسیله interface به اکتیوتی فرستاده بشه ، ولی خطا میده :

Dialog class:

 public class Dialogs {

public interface SizeChangeListener {
public void onChange(int size);
}
SizeChangeListener changeListener;
public int size;

public void setting(final Activity activity) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
alertDialog.setTitle(activity.getString(R.string.setting));

.
.
.

alertDialog.setPositiveButton(activity.getString(R.string.ok),
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(activity, "size = " + size,
Toast.LENGTH_SHORT).show(); // تا اینجا مشکلی نیست
//changeListener.onChange(size);
dialog.dismiss();
}
});

alertDialog.show();
}
}

Activity class:

 public class Main extends Activity implements Dialogs.SizeChangeListener {

Dialogs dialogs = new Dialogs();

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

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, getString(R.string.setting));
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
dialogs.setting(Main.this);
break;
}
return super.onOptionsItemSelected(item);
}

@Override
public void onChange(int size) {
Toast.makeText(
Main.this,
"day main = " + size,
Toast.LENGTH_SHORT).show();
}
}

میتونم از یه راه دیگه این کار رو انجام بدم ولی نمیفهمم مشکل از کجاست ، شما میدونید؟

نظرات

سامان پاپی 12 سال پیش
اسپرینت جان اخطار نا پوینتر اکسپنشن داده این به خاطر اینه که شما نمیتونید برای چیزی که خالی هستش متدی صدا بزنید توی ودیوی پروژه تیک تک تو یا ماشین حساب استاد میگه
Spirit 12 سال پیش
ممنون ، خب همینجاشو نمی فهمم ، کجا خالیه آخه؟
محسن 12 سال پیش
احتمالا اون رادیوباتن با هر چیز دیگه که عدد رو میگیره درست تعریف نشده
Spirit 12 سال پیش
ممنون ، اگه این طور بود توی Toast هم اون عدد دیده نمیشد ، حتی بطور مستقیم یه عدد رو به متد {changeListener.onChange(20)} دادم ولی بازم همون مشکل پابرجاست
Spirit 12 سال پیش
changeListener.onChange(size) کامنتش کردم

پاسخ‌ها 1

Spirit 12 سال پیش

با تشکر از سه دوستی که جرقه حل مشکل رو برام زدن :) ، مشکل null بودن شیء (حالا نمیدونم به اینم مثل کلاس شی میگن یا یه چیز دیگه) interfaceـی بود که پیاده کرده بودم ، که بدین صورت اصلاح میشه :

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

dialogs.changeListener = this;

}

نظرات

sadeghbarout 12 سال پیش
والا من هنوز خیلی با اینترفیس ها و لیسنر ها درگیر نشدم (یه بار درگیر شدم شکست خوردم:|) حالا ایشالا یه بار دیگه باید برم براشون ;)
Spirit 10 سال پیش
بعد گذشت حداقل یکسال الان به خودم گفتم اینم آخه مشکل بود من داشتم!

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