تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ پوریا شفیعی
 (حل مشکل)callBack interface From Dialog to Fragment
جامعه جاوا (اندروید) ایجاد شده در ۱۲ اردیبهشت ۱۳۹۹

استاد وقت بخیر

در متد زیر من اومدم یک کال بک در Dialog م ایجاد کردم تا این کال بک در کلاس Fragment م implements بشه 

اما واقعا نمیدونم چرا به ارور زیر برخورد میکنم.

@Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        iEventCallBackTask = (IEventCallBackTask) context;
    }

ارور مربوطه:

cannot be cast to ir.udmx.atodolist.AddDialog$IEventCallBackTask

من این عمل رو در متد constructor نیز انجام دادم ولی نشد (ذکر کنم که این مقدار دهی برای اکتیویتی به راحتی انجام میشود )

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

ممنون میشم راهنمایی کنید 

و اگر قرار باشه از متد ستر و گتر استفاده کنیم ممنون میشم بگین این متد رو باید کجا و چطوری مقدار دهی کنیم .

سپاس

سلام پوریا.فکر کنم متدonAttach وقتی فراخوانی میشه که دیالوگ  به اکتیویتی وصل میشه.یعنی پارامتر  context متد onAttach همون اکتیویتیه نه فرگمنت و به همین علت نمیتونی اینترفیس رو درون فرگمنت پیاده سازی کنی.

mohammad arefi ۱۲ اردیبهشت ۱۳۹۹، ۱۵:۰۰

دوستان وقت بخیر من این مشکل رو پیدا کردم به همین دلیل اموزششو مینویسم شاید کسی به مشکل من برخورد و بتونه حلش کنه

ابتدا داخل فرگمنت مربوطه:

dialog.setTargetFragment(MainFragment.this , 1);

و سپس در متد onAttach مینویسیم :

iEventCallBackTask = (IEventCallBackTask) getTargetFragment();

اگر دقت کنین میبینین در متد onAttach بجای اینکه context رو بدم getTargetFragment() رو دادم .

ی تشکر ویژه از دوست خوبم پویا رضایی از دانشجو‌های این دوره که کمکم کرد این مشکل حل شد :)

موفق باشید

تایپک بسته .

موفق و پیروز باشین.

پوریا شفیعی ۱۳ اردیبهشت ۱۳۹۹، ۰۶:۳۳

در دیالوگ

 

public class AddFriendDialogFragment extends SherlockDialogFragment {
    private OnAddFriendListener callback;
    public interface OnAddFriendListener {
        public void onAddFriendSubmit(String friendEmail);
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
             callback = (OnAddFriendListener) getTargetFragment();
         } catch (ClassCaseException e) {
             throw new ClassCastException("Calling Fragment must implement OnAddFriendListener"); 
         }
    }
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getSherlockActivity());
        builder.setTitle(R.string.dialog_add_friend)
                .setMessage(R.string.dialog_add_friend_text)
                .setView(editText)
                .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // Grab the text from the input
                        final String friendEmail = editText.getText().toString();
                        callback.onAddFriendSubmit(friendEmail);
                    }
                })
                .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        AddFriendDialog.this.getDialog().cancel();
                    }
                });
        return builder.create();
    }

 و این هم در فرگمنت

 

    private void showDialog() {
        FragmentManager fm = getSherlockActivity().getSupportFragmentManager();
        AddFriendDialogFragment addFriendDialog = new AddFriendDialogFragment();
        addFriendDialog.setTargetFragment(this, 0);
        addFriendDialog.show(fm, "add_friend_dialog");
    }
    @Override
    public void onAddFriendSubmit(String friendEmail) {
        // Do stuff
    }
محمد خرسند ۳۰ تیر ۱۳۹۹، ۱۹:۵۶