Возврат данных из DialogFragment в адаптер
Я пытаюсь использовать интерфейс для получения данных от DialogFragment
до ArrayAdapter
из которого он показан.
Я читал что-то подобное здесь, но я не знаю, как назвать в DialogFragment
функция, возвращающая данные.
кто-нибудь может помочь?
MyDialog.java
public class MyDialog extends DialogFragment {
static interface Listener {
void returnData(int result);
}
/* ... */
@Override
public void onActivityCreated (Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mBtnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// How can I call PCListAdapter.returnData ?
dismiss();
}
});
}
}
PCListAdapter.java
public class PCListAdapter extends ArrayAdapter<PC> implements MyDialog.Listener {
/* ... */
public void showCommentDialog() {
FragmentManager fm = ((Activity)mContext).getFragmentManager();
MyDialog dialog = new MyDialog();
dialog.show(fm, "mydialog");
}
@Override
public void returnData(int result) {
}
}
1 ответов
ссылка, которую вы прочитали, говорит о связи фрагмента с активностью (с помощью слушателей). Это делается потому, что фрагмент тесно связан с деятельностью. Теперь в вашем случае, поскольку вы используете адаптер для запуска фрагмента, это вы, вероятно, могли бы сделать.
public class MyDialog extends DialogFragment {
private Listener mListener;
public void setListener(Listener listener) {
mListener = listener;
}
static interface Listener {
void returnData(int result);
}
/* ... */
@Override
public void onActivityCreated (Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mBtnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.returnData(data);
}
dismiss();
}
});
}
}
и для адаптера,
public class PCListAdapter extends ArrayAdapter<PC> implements MyDialog.Listener {
/* ... */
public void showCommentDialog() {
FragmentManager fm = ((Activity)mContext).getFragmentManager();
MyDialog dialog = new MyDialog();
dialog.setListener(PCListAdapter.this);
dialog.show(fm, "mydialog");
}
@Override
public void returnData(int result) {
}
}