استاد وقت بخیر
در متد زیر من اومدم یک کال بک در 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 همون اکتیویتیه نه فرگمنت و به همین علت نمیتونی اینترفیس رو درون فرگمنت پیاده سازی کنی.
دوستان وقت بخیر من این مشکل رو پیدا کردم به همین دلیل اموزششو مینویسم شاید کسی به مشکل من برخورد و بتونه حلش کنه
ابتدا داخل فرگمنت مربوطه:
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 }