事件处理
1.直接在xml文件里设置android:onClick
<Button
android:id="@+id/btn_sure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sure"
android:onClick="onCheckBoxClicked"></Button>
public void onCheckBoxClicked(View view){
//事件的响应代码
}
2.在java文件中实现View.OnClickListener接口
btn=findViewById(R.id.ok);
//为btn添加事件监听,是下面自定义的实现View.OnClickListener的mClick内部类
btn.setOnClickListener(new mClick());
class mClick implements View.OnClickListener{
@Override
public void onClick(View v) {
//事件的响应代码
}
}
3.使用匿名类(推荐)
Button button=findViewBuId(R.id.btn_sure)
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//事件的响应代码
}
});
Fragment
Fragment动态添加
例如向activity_main.xml中动态添加、删除Fragment
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/minPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
<Button
android:id="@+id/btn_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="remove"></Button>
</LinearLayout>
假设Fragment文件是PhotoFragment.java;那么在mainActivity.java文件中,
public class MainActivity extends AppCompatActivity {
Button button;
Fragment minPhoto=new MinPhotoFragment();
Fragment textFragment=new TextFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//动态添加Fragment
//获取当前Activity的FragmentManager对象
FragmentManager fragmentManager=getSupportFragmentManager();
//开启事务
FragmentTransaction transaction=fragmentManager.beginTransaction();
//添加Fragment,第一个参数是要被添加Fragment的视图布局的id,
// 第二个参数是要添加进去的Fragment对应的java类名字
transaction.add(R.id.minPhoto,minPhoto);
transaction.add(R.id.minPhoto,textFragment);
transaction.commit();
//点击按钮去除Fragment
button=findViewById(R.id.btn_remove);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取当前Activity的FragmentManager对象
FragmentManager fragmentManager=getSupportFragmentManager();
//开启事务
FragmentTransaction transaction=fragmentManager.beginTransaction();
//去除Fragment 参数为要去除的Fragment的java类名
transaction.remove(textFragment);
transaction.commit();
}
});
}
}
Fragment间的通信
1.Fragment中定义接口
2.Fragment中初始化接口,并设置这个接口的set方法
3.Activity中实现这个接口
4.Fragment的onActivityCreated回调方法中添加控件监听,事件处理环节调用接口,具体操作由Activity进行
5.Activity中的onAttach方法中,调用Fragment设置接口的方法,将自身引用传入
下面举个作业中例子:点击小图显示对应的大图
//Fragment类文件代码
public class MinPhotoFragment extends Fragment {
// 1.Fragment中定义接口
public interface ImgClick{
public void onImgClickListener(ImageView imageView);
}
//2.Fragment中初始化接口,并设置这个接口的set方法
ImgClick imgClick;
public void setImgClick(ImgClick imgClick){
this.imgClick=imgClick;
}
....其他代码省略...
}
public class MainActivity extends AppCompatActivity implements MinPhotoFragment.ImgClick{
//3.Activity中实现这个接口
public void onImgClickListener(ImageView imageView) {
maxImg.setImageDrawable(imageView.getDrawable());
}
}
//4.在Fragment的onActivityCreated回调方法中添加监听,事件处理环节调用接口,具体操作由Activity进行
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
for(int i=0;i<img.length;i++) {
ImageView image = (ImageView) this.getActivity().findViewById(img[i]);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgClick.onImgClickListener((ImageView)v);
}
});
}
}
//5.Activity中的onAttachFragment方法中,调用Fragment设置接口的方法,将自身引用传入
@Override
public void onAttachFragment(@NonNull Fragment fragment) {
super.onAttachFragment(fragment);
if(fragment instanceof MinPhotoFragment){ //判断fragment是否为目标Fragment
MinPhotoFragment minPhotoFragment=(MinPhotoFragment)fragment;
minPhotoFragment.setImgClick(this);
}
}