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

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

Spirit  12 سال پیش  10 سال پیش
0 0

در یک اکتیویتی با نمایش یک 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();
}
}

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

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

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

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

dialogs.changeListener = this;

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

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