关于回调的简单理解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值