回调、接口的使用
之前提到过,在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(); } });