您的位置:首页 > 其它

关于回调的简单理解

2015-12-04 15:41 274 查看
package com.example.callback;

import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;

/**
* 简单实现回调
*
* 回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法
*
*
* @author
*
*/
public class CustomDialog {
private  Context context;
private  Dialog mDialog;
private  CustomDialog mCustomDialog;
private  DialogInstance mDialogInstance;

public CustomDialog(Context context, DialogInstance mDialogInstance) {
super();
this.context = context;
this.mDialogInstance = mDialogInstance;
this.mDialog = new Dialog(context, android.R.style.Theme_Translucent_NoTitleBar);  // 半透明状态下没有标题栏的背景,将运行此activity之前的屏幕作为半透明状态作为此activity运行时的样式。
}

/**创建单例*/
public CustomDialog getInstance(){
if (mCustomDialog == null) {
mCustomDialog = new CustomDialog(context, mDialogInstance);
}
return mCustomDialog;
}

public void createDialog(){
View rootView = mDialog.getLayoutInflater().inflate(R.layout.dialog_create , null);  // 加载布局进来
mDialog.setContentView(rootView); // 显示到界面

rootView.findViewById(R.id.textview1).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
mDialogInstance.weixin();
mDialog.dismiss();
}
});

rootView.findViewById(R.id.textview2).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
mDialogInstance.QQ();
mDialog.dismiss();
}
});

mDialog.show();
}

public interface DialogInstance{
public void weixin();
public void QQ();
}

}


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#afafaf">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_centerInParent="true"
android:background="#ffffff"
android:gravity="center">

<TextView
android:id="@+id/textview1"
android:layout_centerInParent="true"
android:gravity="center"
android:text="微信"
android:layout_width="30dp"
android:layout_height="30dp"/>

<TextView
android:id="@+id/textview2"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/textview1"
android:layout_marginLeft="20dp"
android:gravity="center"
android:text="QQ"
android:layout_width="30dp"
android:layout_height="30dp"/>

</RelativeLayout>

</RelativeLayout>


package com.example.callback;

import com.example.callback.CustomDialog.DialogInstance;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
import android.app.Activity;

/**
* 简单实现回调
*
* 回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法
*
* 在MainActivity中实现了CustomDialog中的方法weixin(); 和 QQ();
* @author
*
*/
public class MainActivity extends Activity implements DialogInstance {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.textviewone).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

// 参数二是对 DialogInstance接口的引用,这里一定要有,否则报空指针异常
new CustomDialog(MainActivity.this, MainActivity.this).createDialog();
}
});
}

@Override
public void weixin() {
Toast.makeText(getApplicationContext(), "点击微信", Toast.LENGTH_SHORT).show();
}

@Override
public void QQ() {
Toast.makeText(getApplicationContext(), "点击QQ", Toast.LENGTH_SHORT).show();
}

}


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textviewone"
android:layout_width="60dp"
android:layout_height="50dp"
android:text="@string/hello_world" />

</RelativeLayout>


http://blog.csdn.net/xiaanming/article/details/8703708

http://blog.csdn.net/yyd_Diablo/article/details/47056531
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: