繁体   English   中英

如何将 boolean 值从 DialogFragment 传递到 Android 中的另一个片段?

[英]How do I pass a boolean value from a DialogFragment to another Fragment in Android?

我正在尝试这样做,以便清除按钮打开一个警报对话框,其中包含是或否。 单击是按钮时,它应该将一个布尔值从对话框片段传递给另一个片段。 如果该值为真(单击“是”时应该为真),它将调用将清除数据库的方法。 这是对话片段和我试图实现它的片段的一部分。 我无法让对话框出现,但到目前为止它确实使屏幕变暗,我认为这意味着我没有正确连接它。

对话框片段:

public class DialogClear extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState){
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View dialogView = inflater.inflate(R.layout.clear_dialog, null);
        final Button yes = dialogView.findViewById(R.id.yes);
        final Button no = dialogView.findViewById(R.id.no);

        no.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });

        yes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });

        return builder.create();
    }

}

这是我试图从我的碎片中调用它的方式

       clearButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialogClear = new DialogClear();
                dialogClear.setTargetFragment(BloodPressureFragment.this, 1);
                dialogClear.show(getFragmentManager(),"");

                    dataManager.clearDatabase();
                    dataManager.createDatabase();
                    dataText.setText("");
                    dataText.setBackgroundResource(R.drawable.no_border);
                    updateList();
                }

        });

欢迎来到代码派对

你有很多选择来完成这项工作,但我会向你展示使用片段的最佳方式。

如您所知,所有片段都在一个活动中发生变化并从中扩展。

所以简单的方法是这样的:

1.在你的活动中建立公共领域

2.在activity上构建一个getInstant方法

3.填充并从您希望在此显示的任何片段中获取该活动的值

看这个例子:

public boolean isLocationOn;

该字段现在在活动中构建:在任何片段中:

MainActivity.getInstance().isLocationOn = true;

在其他片段中:

if(MainActivity.getInstance().isLocationOn){

 //todo show map or ...
}

这样你就可以在片段中使用任何东西

在评论中更新我

你应该阅读并尝试使用 3 件事来解决这个问题。

1. 导航组件

  • 易于导航到片段和 DialogFragment

2. 查看Model

  • 在活动的不同片段之间共享相同的视图 Model
  • 方向改变时数据不会丢失
  • 所有业务逻辑集中在一处,易于单元测试

3. 实时数据

  • 推荐用于响应式 ui
  • 简单易懂的Api

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM