DialogFragment与Activity通信最佳实践

这篇博客与上篇http://blog.csdn.net/ethanhola/article/details/50888410组成一个Surfaceview中自由手绘的demo,源码地址:https://github.com/boomstack/MySurfaceView
欢迎follow and fork!

Google推荐使用DialogFragment创建对话框,因为Android系统设计的初衷就是高度组件化,不是我说的,详见api guides第一课:http://developer.android.com/guide/index.html,而fragment本身就是非常灵活的组件,使用fragment是大势所趋。

本博客就在DialogFragment中使用HoloColorpicker这个开源库实现在Dialog中选择颜色并传递给MainActivity,(HoloColorpicker源码地址: https://github.com/LarsWerkman/HoloColorPicker

首先跟普通fragment一样,先继承自DialogFragment:

public class ColorPickerDialogFragment extends DialogFragment {
    ColorPicker picker;//颜色
    int pickedColor;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View convertView = inflater.inflate(R.layout.layout_fragment_colorpicker, null);
        picker = (ColorPicker) convertView.findViewById(R.id.picker);
        picker.setOnColorSelectedListener(new ColorPicker.OnColorSelectedListener() {
            @Override
            public void onColorSelected(int color) {
                pickedColor = color;
            }
        });
        builder.setView(convertView).setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                OnColorChosenListener li = (OnColorChosenListener) getActivity();
                if (pickedColor != 0) {
                    li.onColorChosen(pickedColor);
                }
            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialogDismiss();
            }
        });
        return builder.create();
    }


    public void dialogDismiss() {
        this.dismiss();
    }

    public interface OnColorChosenListener {
        void onColorChosen(int color);
    }
}

复写了onCreateDialog方法,在里边创建AlertDialog,我们最终要向Activity中传的是选择好的颜色,即pickedColor,可以看到,最后有一个回调接口OnColorChosenListener,在“确定”按钮中调用,在Activity中回调此方法,下面是MainActivity部分代码:

public class MainActivity extends AppCompatActivity implements ColorPickerDialogFragment.OnColorChosenListener {
    private MainSurfaceView sv;
。。。。。。。。。。
 @Override
    public void onColorChosen(int pickedColor) {
        this.pickedColor = pickedColor;
        updateColor();
    }

    public void updateColor() {
        sv.setPaintColor(pickedColor);
    }

这样通过回调将Dialog中的pickedColor传入到了MainActivity中去,然后surfaceview实例就可以调用自家的方法了~
这里就可以看到回调的解耦和作用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值