Java 在Android对话框中使用列表-如何避免静态?
我有一个使用Java 在Android对话框中使用列表-如何避免静态?,java,android,static,dialog,Java,Android,Static,Dialog,我有一个使用对话框片段的活动。这是我第一次实现一个对话框,所以我使用需要是静态的newInstance(如多个指南中所建议的)创建这个对话框;因此,我的对话框片段也是静态的 我使用列表来存储和填充对话框,但要这样做,需要在活动中将此列表声明为静态。顺便说一句,在Java中保存静态变量是不好的做法。那么我能在我的情况下避免它吗?怎么做 换句话说,如何将数据从活动传递到对话框而不使其处于静态状态?注意,我需要经常修改这个列表 我创建的对话框如下所示: FragmentManager fm = get
对话框片段的活动。这是我第一次实现一个对话框,所以我使用需要是静态的newInstance
(如多个指南中所建议的)创建这个对话框;因此,我的对话框片段也是静态的
我使用列表
来存储和填充对话框,但要这样做,需要在活动中将此列表声明为静态。顺便说一句,在Java中保存静态变量是不好的做法。那么我能在我的情况下避免它吗?怎么做
换句话说,如何将数据从活动传递到对话框而不使其处于静态状态?注意,我需要经常修改这个列表
我创建的对话框如下所示:
FragmentManager fm = getSupportFragmentManager();
PickDisplayDialogFragment alertDialog = PickDisplayDialogFragment.newInstance("Displays");
alertDialog.show(fm, "fragment_alert");
我的新实例如下所示:
public static PickDisplayDialogFragment newInstance(String title) {
PickDisplayDialogFragment frag = new PickDisplayDialogFragment();
Bundle args = new Bundle();
args.putString(DIALOG_TITLE, title);
frag.setArguments(args);
return frag;
}
编辑:我使用getList()获取列表,并(通过转换为数组)使用dialog.setItems():
只需使用putStringArrayList()函数将字符串放入捆绑包。
只需使用putStringArrayList()函数将字符串放入捆绑包中即可。
请你把你想用的地方暴露出来好吗列表
@Rudziankoŭ当然,编辑了这个问题。请注意,在getList()中,我将列表转换为数组,以便在setItems()中使用它。请您公开您想使用list
@Rudziankoŭ的位置。当然,编辑了这个问题。请注意,在getList()中,我将列表转换为数组,以便在setItems()中使用它,但捆绑包是在newInstance中创建的,newInstance位于DialogFragment中。我的名单在外面,在活动中。为什么会这样?因为我首先通过异步任务从服务器获取数据;我存储在这个列表中的数据。实际上,你有一个观点;只需将其作为参数添加到newInstance中。我明天会试试,但是包是在newInstance中创建的,它在DialogFragment中。我的名单在外面,在活动中。为什么会这样?因为我首先通过异步任务从服务器获取数据;我存储在这个列表中的数据。实际上,你有一个观点;只需将其作为参数添加到newInstance中。我明天试试看。
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String title = getArguments().getString(DIALOG_TITLE);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setTitle(title);
alertDialogBuilder.setItems(getList(), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
createIntentViewDisplay(which);
}
});
return alertDialogBuilder.create();
}