一、fragment调用activity里面的方法:
1、直接调用
((MainActivity) getActivity()).goShopping();//goShopping为activity里面的方法
2、官方推荐写法,接口回调(推荐,解耦最好)
private OnListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnListener) {
mListener = (OnListener) context;
}
else {
throw new RuntimeException(context.toString()
+ " must implement OnListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnListener {
void getResult(String data);
}
然后在Activity实现上面的接口:
public class MainActivity extends AppCompatActivity implements OnListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void getResult(String data) {
}
}
然后在fragment里面需要调用的地方使用:
mListener.getResult("测试");
3、使用handler
在activity中传一个实例handler到fragment里面,然后直接在fragment里面调用即可
二、activity直接使用控件id
activity直接使用控件id,而不需要findviewbyid的操作,只需要在app的build.grade里面添加
id 'kotlin-android-extensions'
注意:如果运行报错,gradle.properties可以加上android.enableJetifier=true
第二种解决办法,可以用:
android{ buildFeatures{ viewBinding true } }