如何从适配器中解除DialogFragment?

时间:2014-07-19 04:34:13

标签: android listview android-fragments android-adapter android-dialogfragment

我对一个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

5 个答案:

答案 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();
    }
}