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

2017-04-21  本文已影响0人  路很长_6193

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布局设置弹窗。就不用使用接口回调。

上一篇下一篇

猜你喜欢

热点阅读