(حل مشکل)callBack interface From Dialog to Fragment

پرسیده شده
فعالیت 1382 روز پیش
دیده شده 731 بار
3

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

در متد زیر من اومدم یک کال بک در 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 نیز انجام دادم ولی نشد (ذکر کنم که این مقدار دهی برای اکتیویتی به راحتی انجام میشود )

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

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

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

سپاس

فایل پیوست

پوریا شفیعی
پوریا شفیعی

12 اردیبهشت 99

1
حذف شده

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

فایل پیوست

mohammad arefi

توسط

mohammad arefi

12 اردیبهشت 99

حذف شده
سلام آره محمد واقعا نمی‌دونم چطور باید مقدار بهش بدم داخل کانستراکتورم نشد
پوریا شفیعی

12 اردیبهشت 99

3
حذف شده

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

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

dialog.setTargetFragment(MainFragment.this , 1);

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

iEventCallBackTask = (IEventCallBackTask) getTargetFragment();

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

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

موفق باشید

تایپک بسته .

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

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

13 اردیبهشت 99

1
حذف شده

در دیالوگ

 

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
    }
فایل پیوست

محمد خرسند

توسط

محمد خرسند

30 تیر 99