美文网首页
Java到Android小项目(自定义Dialog)来理解接口回

Java到Android小项目(自定义Dialog)来理解接口回

作者: 路很长_6193 | 来源:发表于2017-04-21 15:58 被阅读0次

    1.首先来看演示结果:

    案例代码目录结构:

    1.未运行时候的界面:

    2.运行之后项目:(最底层MainActivity.class界面,上册绿色是自定义的CustomDialog界面)

    3.点击x号:将消失,点击购买套餐将调整到对应页面

    2.分析过程:

    首先CustomDialog是外部自定义的一个弹窗,所以弹窗里面的关闭和购买控件属于弹窗本身而不属于MainActivity.class,在MainActivity里面无法实例化,所以到我们需要关闭和购买时候,无法MainActivity.class里面进行相应的事件操作。这时候我们就需要定义一个接口(LeaveMyDialogListener),在MainActivity.class里面实现接口(或者内部类形式),将MainActivity对象(接口)的引用通过CustomDialog的一个方法以参数形式传递到CustomDialog.class给CustomDialog里面的接口变量赋值(this.listener= listeners;),在需要时候通过接口方法来实现回调。

    3.代码过程:

    1.自定义的Dialog类:

    public classCustomDialogextendsDialogimplementsView.OnClickListener {

    privateContextcontext;

    privateLeaveMyDialogListenerlistener;

    //创建接口用来实现回调(可以在内部也可以定义一个单独的接口看你习惯了)

    interfaceLeaveMyDialogListener {

    voidonClick(View view);

    }

    privateImageButtonib_buy_pac_close;

    privateImageButtonib_buy_pac_btn;

    //TODO这里是imageView这张图片的背景。

    privateStringmimage;

    publicCustomDialog(@NonNullContext context) {

    super(context);

    }

    //3.这里给接口变量赋值

    publicCustomDialog(Context context,inttheme, LeaveMyDialogListener listeners) {

    super(context, theme);

    this.context= context;

    this.listener= listeners;  //3.这里给接口变量赋值

    }

    //4.创建Activity

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_custom_dialog);

    initView();

    }

    private voidinitView() {

    //5.实例化控件

    ib_buy_pac_close= (ImageButton) findViewById(R.id.ib_buy_pac_close);

    ib_buy_pac_btn= (ImageButton) findViewById(R.id.ib_buy_pac_btn);

    //7.点击之后

    ib_buy_pac_close.setOnClickListener(this);

    ib_buy_pac_btn.setOnClickListener(this);

    }

    //8.当点击关闭和购买时候触发接口进行回调

    @Override

    public voidonClick(View v) {

    listener.onClick(v);

    }

    }

    1.MainActivity.class代码:

    public classMainActivityextendsAppCompatActivity {

    privateCustomDialogcustomDialog;

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    //1.首先实例化

    initView();

    //6.然后显示弹窗

    customDialog.show();

    }

    private voidinitView() {

    /*2.这里是内部类的写法,当然也可以实现接口:看你喜好*/

    customDialog=newCustomDialog(this, R.style.Theme_AppCompat_Light,newCustomDialog.LeaveMyDialogListener() {

    @Override

    public voidonClick(View view) {

    switch(view.getId()) {

    //9.实现回调

    caseR.id.ib_buy_pac_close:

    customDialog.dismiss();

    break;

    caseR.id.ib_buy_pac_btn:

    startActivity(newIntent(MainActivity.this, ToOtherActivity.class));

    break;

    }}});}

    }

    当然就这个案例是相对于接口回调来自定义的一个外部弹窗:我们如果不想用接口回调我们可以在MainActivity.class里面自定义View布局设置弹窗。就不用使用接口回调。

    相关文章

      网友评论

          本文标题:Java到Android小项目(自定义Dialog)来理解接口回

          本文链接:https://www.haomeiwen.com/subject/lpbdzttx.html