gpt4 book ai didi

android - 在对话框 fragment 选项选择上更新 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:45 32 4
gpt4 key购买 nike

我有一个 fragment ,在组件上单击弹出窗口 DialogFragment。此对话框 fragment 包含选项列表。当从列表中选择一个选项时,我想通知 fragment ,以便我可以运行字段更新过程。我做了这样的事情

@Override
public void onClick(DialogInterface dialog, int item) {
updateSharedPreference(item);
Log.e("ProfilePersonaListDialog", "Click on dialog, inside onClick");
OnCloseListDialogListener act = (OnCloseListDialogListener) getActivity();
act.onDialogListSelection();

dismiss();
}

然而,此 getActivity() 调用 FragmentActivity 而不是触发对话 fragment 的 fragment 。我可以终止当前打开/正在运行的 fragment 并调用一个新实例来获取更新的字段,但这是我希望避免的肮脏解决方案。

一旦在对话框 fragment 中选择了选项,有什么关于如何更新 fragment 的建议吗?

最佳答案

刚刚带着解决方案回来。我的问题实际上是转发当前 fragment getTag() 字符串作为 DialogFragment 的 show() 参数。如果有人对这里感兴趣是工作示例。

创建简单的监听器

public interface OnCloseListDialogListener {
public void onDialogListSelection();
}

创建将扩展 DialogFragment 的新对话框



public class ListDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {

private PersonaData[] mPersonaData;
private String[] mPersonaName;
private final String TAG;

public static ListDialogFragment newInstance(PersonaData[] personaData, String tag) {
ListDialogFragment dialog = new ListDialogFragment(personaData, tag);
Bundle bundle = new Bundle();
dialog.setArguments(bundle);
return dialog;
}

private ListDialogFragment(PersonaData[] personaData, String tag) {
this.mPersonaData = personaData.clone();
this.TAG = tag;
}

@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setCancelable(true);
int style = DialogFragment.STYLE_NORMAL, theme = 0;
setStyle(style, theme);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.dialog_title);
mPersonaName = getData();//Your own implementation here
builder.setNegativeButton("Cancel", this);
builder.setSingleChoiceItems(mPersonaName, -1, new SingleChoiceListener());
return builder.create();

}

@Override
public void onClick(DialogInterface dialogInterface, int i) {
}

private class SingleChoiceListener implements DialogInterface.OnClickListener {
@Override
public void onClick(DialogInterface dialog, int item) {
updateSharedPreference(item);
OnCloseListDialogListener act = (OnCloseListDialogListener) getFragmentManager().findFragmentByTag(TAG);
act.onDialogListSelection();
dismiss();
}
}
}

然后在您希望从中调用此对话框的 fragment 中执行以下操作。 DIALOG 只是字符串常量,我只是把对话框放在那里


SOME_CLICKABLE.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
FragmentManager manager = getFragmentManager();
ListDialogFragment dialog = ListDialogFragment.newInstance(mPersona, getTag());
dialog.show(manager, DIALOG);
}
});

关于android - 在对话框 fragment 选项选择上更新 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502937/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com