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

پروژه هنگ من و یک ایراد کوچک (حل نشده)

SaeiD-as  11 سال پیش  10 سال پیش
+1 0

سلام استاد در پروژه هنگ من برای خواندن متن Button و جلوگیری از تعریف چندین Button در برنامه، در تنظیمات onClick رو ست کردند و تابع letterOnClickListener رو در برنامه استفاده کردند:

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

        dialogRequest = new Dialog(Activity.this);
        dialogRequest.setContentView(R.layout.dialog);

        dialogRequest.show();
    }

public void letterOnClickListener(final View view) { <-- این تابع
Button btn = (Button) view; String letter = btn.getText().toString(); Log.i("LOG", "letter : " + letter); } }

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

E/AndroidRuntime(3157): FATAL EXCEPTION: main
E/AndroidRuntime(3157): java.lang.IllegalStateException: Could not find a method letterOnClickListener(View) in the
activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'Button12' E/AndroidRuntime(3157): at android.view.View$1.onClick(View.java:3586) E/AndroidRuntime(3157): at android.view.View.performClick(View.java:4204) E/AndroidRuntime(3157): at android.view.View$PerformClick.run(View.java:17355) E/AndroidRuntime(3157): at android.os.Handler.handleCallback(Handler.java:725) E/AndroidRuntime(3157): at android.os.Handler.dispatchMessage(Handler.java:92) E/AndroidRuntime(3157): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(3157): at android.app.ActivityThread.main(ActivityThread.java:5041)

 

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
amiryaser  11 سال پیش
+3 0

اگه کدهای دیالگتونم میذاشتین بهتر میشد بررسی کرد  ولی به احتمال زیاد خطاتون توی تعریف باتن هاست ...
حواستون باشه توی دیالوگ باید به فرمت زیر تعریف کنید....

//شی که از دیالوگ ساخنه شده
 final Dialog myDialog = new Dialog(MyActivity.this);

// ساختن باتن یا هر چیز شبیه به اون در دیالوگ
Button btnDialog = (Button) myDialog.findViewById(R.id.btn_sample);
0 0
کدهای دیالوگ رو قرار دادم داخل متد onCreate، استاد چون باتن ها رو تعریف نکردند منم تعریف نکردم، اصلا هدف من از استفاده این کد تعریف نکردن اینهمه باتن هست (11 سال پیش)
0 0
بله متوجه شدم .... نکته ای که در دیالوگ متفاوت هست اینه که حتما باید ویویی که دریافت میشه داخل دیالوگ تعریف بشه اونم به فرمتی متفاوت همون طور که میبینید. (11 سال پیش)
0 0
چطور تعریفش کنم؟ مشکل من همین جاست (11 سال پیش)
0 0
به همین شکلی که در بالا تعریف کردم یعنی باید باتن تعریف بشه داخل دیالوگ و قبلشم اسم شی که دیالوگ ازش ساخته شده بیاد (mydialog.findviewbyid)...... کار در دیالوگ یکم متفاوته .... (11 سال پیش)
0 0
داداش من با دیالوگ خیلی کار کردم، شما میگین باتن رو تعریف کن اما نیازی به این کار نیست، من از تابع letterOnClickListener استفاده میکنم که تعریفشون نکنم، چون برای این کار من بیست تا باتن دارم که همه رو باید تعریف کنم!! (11 سال پیش)
+1 0
دقیقا < شما باید هر 20 Button رو حتما تعریف کنید و مقدار دهی هم کنید < و در این روشی که استاد گفتند و شما قصد استفاده از اون رو دارید button ها تعریف میشوند و مقدار دهی هم میشند < فقط setOnClickListener ها دوباره نویسی نمیشوند < و فقط یک لیستنر رو برای همه ی Button ها استفاده میکنیم < بجای اینکه برای همه ی باتن ها لیستنر بنویسیم (11 سال پیش)
0 0
خب ببینید در داخل همین پروژه ای که من نوشتم اگر کدهای دیالوگ رو حذف کنم و تمام باتن هارو داخل اکتیویتی اصلی قرار بدم و داخل letter، onClick رو بنویسم اونوقت دیگه نیازی نیست باتنی findViewid براش بنویسم و فقط به محض کلیک روی اون باتن متنش داخل لوگ چاپ میشه، من همین کارو میخوام انجام بدم فقط زمانی که باتن هام داخل دیالوگ هستند اما نمیشه، امیدوارم منظورمو رسونده باشم (11 سال پیش)
0 0
سلام . واسه من هم همین خطا رو زد ، بعد که خوب بررسی کردم دیدم که کلمه ی letterOnClickListener رو توی on click در properties صحیح ننوشته بودم و دقیقا همین خطا رو تول log برای من میزد . (10 سال پیش)
پاسخ به سوال 
amiryaser  11 سال پیش
0 0

پاسخ به سوال 
amiryaser  11 سال پیش
+1 0

بله میدونم به خاصیت onclick  باتن ها مقدار leterOnclickListener میدید و بعد همه رو یه جا تعریف میکنید  ، من کاملا متوجه منظورتون شدم اما بنده میگم این روش در دیالوگ کمی متفاوته چون تعریف در دیالوگ هم متفاوته 

چون معمولا خطازیاد داره و قواعد خاص خودشو

و همه چی باید  تو همون دیالوگ ساخته بشه نه بیرونش 

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

Button btn =(Button) dialogRequest.view;

 

0 0
مرسی که وقت گذاشتین، این کارو قبلا انجام دادم نمیشه، حتی از اونجایی که dialogRequest داخل این تابع تعریف نشده اونو بصورت فیلد تعریف کردم، یچی که الآن متوجه شدم اینه که کلا این تابعو نمیشناسه یعنی اروری که به من میده میگه شما داخل properties تعریف کردی letter اما هیچ تابعی براش وجود نداره!! (11 سال پیش)

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