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