将数据从DialogFragment传递到ListFragment中的ArrayAdapter

时间:2015-06-18 16:03:03

标签: android android-listfragment android-dialogfragment

我有ListFragment,其中每行都有按钮,点击后打开dialogFragment,用户可以在其中选择10个选项中的1个(它是10个选项的listView)。 我想在SQLite数据库中保存这个选择(它已经完成)并在dialogFragment消失后立即反映ListFragment特定列表行中的选择。怎么做?

我读过那篇文章:http://developer.android.com/ ... / basics / fr ... / communications.html 但是我不知道如何在我的情况下实现这个想法,因为在我的情况下,它是两个片段之间的通信,省略了活动。

Situation explaation

1 个答案:

答案 0 :(得分:2)

假设您正在显示ListFragment中的Dialog,您希望在用户单击OK时获得回调。在Dialog中创建一个片段可以实现的接口,然后在用户单击OK时调用它。

public class ConfirmDialog extends DialogFragment implements Dialog.OnClickListener {

public interface OnItemSelectedListener {
    void onItemSelected(final int itemId);
}

private OnItemSelectedListener mListener;

public ConfirmDialog() {
    //Empty constructor
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    //Do your setup here.
    return new AlertDialog.Builder(getActivity())
            .setTitle("MyTitle")
            .setMessage("Pick one")
            .setPositiveButton(R.string.ok, this)
            .setNegativeButton(R.string.cancel, this)
            .setView(R.layout.my_list_view)
            .create();
}

public void setOnItemSelectedListener(final OnItemSelectedListener listener) {
    mListener = listener;
}

@Override
public void onClick(DialogInterface dialog, int which) {
    if (mListener != null && which == Dialog.BUTTON_POSITIVE) {
        mListener.onItemSelected(/*Get the currently selected item from your listview*/0);
    }
}

这会将信息传递回ListFragment,您可以在其中更新SQL并刷新列表以反映您所做的更改。

更新数据库后,您需要更新列表适配器正在查看的列表,很可能是重新查询。然后你需要在适配器上调用notifyDataSetChanged,它应该刷新。