我对一个Activity有一个DialogFragment。此DialogFragment是由Web服务调用填充的列表视图。单击此列表视图中的一行后,对话框将消失,并且活动将继续通过“片段接口模式”从适配器传递的字符串。我有以下适配器类:
public class MyAdapter extends ArrayAdapter<Profile> implements AdapterView.OnItemClickListener {
....
// Activity implements this interface to use callback and get id value
public interface MyDialogListener {
void onFinishMyDialog(String id);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Profile selectedProfile = getItem(position);
String selectedProfileID = selectedProfile.getId();
// fragments dont have their own context, get Activity fragment belongs to
Context context = getContext();
MyDialogListener listener = (MyDialogListener)context;
listener.onFinishMyDialog(selectedProfileID);
/* NO ACCESS TO FRAGMENT, CANNOT DO THIS
dismiss(); */
}
如何解除对话框片段并控制权返回活动?我无法从上下文中获取片段,因为它们没有(Android - Getting context of a fragment in a pager)
答案 0 :(得分:4)
从片段到适配器传递一个interface
(带有rowClicked(对象对象)),以通知片段单击了哪一行。
注意:还可以将一个接口(带有dismissed(对象对象))从活动传递到片段,以便在取消对话框时通知活动。
答案 1 :(得分:0)
使对话框保持静态,然后你可以在任何
的地方解雇它可能会帮助你
答案 2 :(得分:0)
在适配器构造函数中传递活动对象,从适配器调用方法以解除对话框。
答案 3 :(得分:0)
按如下方式向适配器添加构造函数。
public class MyAdapter extends ArrayAdapter<Profile> implementsapterView.OnItemClickListener {
Dialog dialog;
....
MyAdapter(Dialog dialog) {
this.dialog = dialog;
}
}
现在调用dialog.dismiss(),无论你想要解除适配器中的对话框。
答案 4 :(得分:0)
1:将PopUpFragment上下文传递给适配器
public class PopUpFragment extends DialogFragment {
//pass PopUpFragment Context to adapter
MyAdapter adapter = new MyAdapter(PopUpFragment.this);
}
2:在construstor上初始化PopUpFragment对象并关闭对话框片段
public class MyAdapter extends ArrayAdapter<Profile> implementsapterView.OnItemClickListener {
PopUpFragment fragment;
//initialize PopUpFragment object on construstor
MyAdapter(PopUpFragment dialog) {
this.fragment= dialog;
}
onclick{
//dismiss dialog on click
fragment.dismiss();
}
}