事件处理

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事件
//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);
    }
}