关于回调的简单理解
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
相关文章推荐
- 使用CSS修改HTML5 input placeholder颜色
- spring--简单实现定时器(配置+注解)
- 欧拉路+字典树 poj2513 Colored Sticks
- Android自定义View----1. 自定义组合控件
- 程序员面试金典第一章 面试流程以及面试时十大常见错误
- Unix Network Programming(9)---Socket函数
- haproxy 基础知识
- js函数中 "闭包"概念的简单认识
- QEMU, a Fast and Portable Dynamic Translator
- Flash 文件加载方案以及一些问题及解决(1)
- ios 在ios9中 NSNotificationCenter addObserver 不会影响对象释放
- 融云Android 2.0 IMkit UI样式更改
- 前端之Android入门(3):MVC模式(上)
- Java中volatile关键字的含义
- python读取文件
- Error starting static Resources
- JAVA中字符串比较equals()和equalsIgnoreCase()的区别
- Mac下使用ssh、scp
- 【剑指offer】之数组中的逆序对
- 通过三目运算符来看JAVA的自动拆箱和装箱