回调、接口的使用

之前提到过,在Recycleview中若想要调用所属Activity中的方法,可以在Recycleview的Adapter构造时传入Activity对象并暂存下来,就可以对该对象进行操作,调用Activity中的方法;

例如下面,FragmentStatePagerAdapter的构造函数中,对MainActivity对象进行赋值。

    private List<Fragment> fragmentlist;private MainActivity context;

    public MainFragmentStatePagerAdapter(MainActivity context, FragmentManager fm, List<Fragment> fragmentlist)
    {
        super(fm);
        this.context = context;
        this.fragmentlist = fragmentlist;
    }

但是这种方法不太规范,可考虑使用接口进行回调的方法;

例如,在一个Fragment中有个按钮,点击该按钮需要调用Activity中的函数;

首先,在Fragment中定义一个接口,在此不需要实现:

    public interface OnButtonClickListener{
        //当“哼歌作曲”被点击时
        void click_button_sing();
    }

然后在Fragment中声明一个该接口,并实现其赋值函数:

private OnButtonClickListener mOnButtonClickListener;
public void setOnButtonClickListener(OnButtonClickListener mOnButtonClickListener){
    this.mOnButtonClickListener = mOnButtonClickListener;
}

接着对Button对象编写其点击监听器,被点击时调用mOnButtonClickListener对象中的函数:

button_aicompose_sing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnButtonClickListener.click_button_sing();
}
});

Fragment部分的代码就完成了,接下来在Activity中进行编写,创建一个该Fragment对象,并编写其监听器,监听器中就可以调用本Activity中的函数了:

AIComposeFragment aiComposeFragment = new AIComposeFragment();
aiComposeFragment.setOnButtonClickListener(new AIComposeFragment.OnButtonClickListener() {
    @Override
    public void click_button_sing() {
        GotoRecorderActivity();
    }
});

 

posted on 2019-04-12 20:29  赵子隆  阅读(350)  评论(0编辑  收藏  举报

导航