浅谈android回调

来源:互联网 发布:做文档的软件 编辑:程序博客网 时间:2024/06/06 03:59

                                      安卓回调机制在很多场合会用到,比如我们用的监听都是回调接口,这里我用一个小获取头像demo来演示下回调


XML代码:

mainactivity的xml代码;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.dialogfragmentdemo.MainActivity">    <ImageView        android:id="@+id/iv_icon"        android:layout_width="80dp"        android:layout_height="80dp"        android:layout_centerInParent="true"        android:scaleType="fitXY"        android:src="@mipmap/ic_launcher" /></RelativeLayout>

//dialogframgent的xml代码

<!--注意背景颜色设置半透明#6000000--><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/rl_layout"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@color/dialog">    <TextView        android:id="@+id/tv_camera"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:background="@android:color/white"        android:gravity="center"        android:padding="10dp"        android:text="从相机获取"        android:textColor="@android:color/holo_blue_dark"        android:textSize="18sp" />    <View        android:id="@+id/line"        android:layout_width="match_parent"        android:layout_height="1px"        android:layout_above="@id/tv_camera"        android:background="@android:color/darker_gray" />    <TextView        android:id="@+id/tv_phone"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_above="@id/line"        android:background="@android:color/white"        android:gravity="center"        android:padding="10dp"        android:text="从相册获取"        android:textColor="@android:color/holo_blue_dark"        android:textSize="18sp" /></RelativeLayout>


java代码

//dialogfragment代码

<!--注意背景颜色设置半透明#6000000--><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/rl_layout"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@color/dialog">    <TextView        android:id="@+id/tv_camera"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:background="@android:color/white"        android:gravity="center"        android:padding="10dp"        android:text="从相机获取"        android:textColor="@android:color/holo_blue_dark"        android:textSize="18sp" />    <View        android:id="@+id/line"        android:layout_width="match_parent"        android:layout_height="1px"        android:layout_above="@id/tv_camera"        android:background="@android:color/darker_gray" />    <TextView        android:id="@+id/tv_phone"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_above="@id/line"        android:background="@android:color/white"        android:gravity="center"        android:padding="10dp"        android:text="从相册获取"        android:textColor="@android:color/holo_blue_dark"        android:textSize="18sp" /></RelativeLayout>

//mainactivity代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    ImageView iv_icon;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        iv_icon = (ImageView) findViewById(R.id.iv_icon);        iv_icon.setOnClickListener(this);    }    //监听点击头像    @Override    public void onClick(View v) {        CustomDialogFragment dialog = new CustomDialogFragment();        //启动        // 括号参数(fragment管理员,注意你导包是上面fragment就用什么管理员,随便定义个字符串,用于区分多个dialog用)        dialog.show(getFragmentManager(), "tag");       /* //第四步 通过接口所在的类点击接口对象        CustomDialogFragment.ICallBack iCallBack = new CustomDialogFragment.ICallBack() {            @Override            public void getImage(Uri uri) {                //获取数据;接口括号参数就是结果                iv_icon.setImageURI(uri);            }        };        //第五步,把接口对象设置到接口定义的set方法里面        dialog.setiCallBack(iCallBack);*/        //简写通过接口所在的类的对象调用用接口的set方法;实现接口获取接口括号参数,就是结果;        dialog.setiCallBack(new CustomDialogFragment.ICallBack() {            @Override            public void getImage(Uri uri) {                iv_icon.setImageURI(uri);            }        });    }}

//总结回调实现

  第一 在获取数据,需要把数据传递出去的类中 定义一个接口,需要传递数据就在接口里面定义一个方法括号参数就是传递的数据

//通过回调把数据传给mainActivity//第一步定义个接口(如果需要带结果回去就,在里面定义个方法括号参数就是带回去的结果)public interface ICallBack {    void getImage(Uri uri);}


//第二步定义个接口对象 创建个set方法括号参数有接口private ICallBack iCallBack;public void setiCallBack(ICallBack iCallBack) {    this.iCallBack = iCallBack;}

//地三步获取数据给接口方法里面的参数赋值iCallBack.getImage(uri);

//第四步 通过接口所在的类的对象调用用接口的set方法;实现接口获取接口括号参数,就是结果;dialog.setiCallBack(new CustomDialogFragment.ICallBack() {    @Override    public void getImage(Uri uri) {        iv_icon.setImageURI(uri);    }});


0 0
原创粉丝点击