学习笔记 ——Activity和Fragment之间的通信(用接口回调)

版权声明:转载请注明出处 https://blog.csdn.net/menwaiqingshan/article/details/83856493

学习笔记 ——Activity和Fragment之间的通信(用接口回调)

写接口回调这回事,每次都会忘记怎么写然后又要重新百度,整理是对自己的一个提升

Activity中触发,Fragment中响应

Activity写接口和触发

private OnClickActivityListener mOnClickActivityListener;

/**
 *接口定义
**/
public interface OnClickActivityListener {
    void onClickActivity();
}

/**
 * 绑定接口
 *
 * @param
 */
@Override
public void onAttachFragment(Fragment fragment) {
    try {
        mOnClickActivityListener = (OnClickActivityListener) fragment;
    } catch (Exception e) {

    }
    super.onAttachFragment(fragment);
}


//触发
btnActivity.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(mOnClickActivityListener!=null){
            mOnClickActivityListener.onClickActivity();
        }
    }
});

Fragment中接口实现

public class InterfaceBackFragment extends Fragment implements InterfaceBackActivity.OnClickActivityListener {
    
    @Override
    public void onClickActivity() {
        btnFragment.setText("Activity中的按钮被点击");
    }
}

Fragment中触发,Activity中响应

Fragment中写接口和触发

private OnFragmentInteractionListener mListener;

/**
 *接口定义
**/
public interface OnFragmentInteractionListener {
    void onFragmentInteraction();
}

/**
 *绑定
**/
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

//触发
btnFragment.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mListener != null) {
            mListener.onFragmentInteraction();
        }
    }
});

Activity中接口实现

public class InterfaceBackActivity extends AppCompatActivity implements InterfaceBaceFragment.OnFragmentInteractionListener{
    @Override
    public void onFragmentInteraction() {
        Toast.makeText(getApplicationContext(), "点击了Fragment中的控件", Toast.LENGTH_SHORT).show();
    }
}

Activity中触发,Adapter中响应

Adapter接口定义和触发

/**
 *接口定义
**/
public interface OnChildItemClickListener {
    void onItemClick(int pos);
}

/**
 *Adapter中的构造函数传入listener
**/
public InterfaceBackAdapter(ArrayList<String> mList, OnChildItemClickListener listener) {
    this.mList = mList;
    mListener = listener;
}

//触发
holder.mTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mListener.onItemClick(position);
        }
    });

Activity中实现

private InterfaceBackAdapter.OnChildItemClickListener mListener;
private InterfaceBackAdapter mInterfaceBackAdapter;

mInterfaceBackAdapter = new InterfaceBackAdapter(mList, mListener);

mListener = new InterfaceBackAdapter.OnChildItemClickListener() {
    @Override
    public void onItemClick(int pos) {
        Toast.makeText(getApplicationContext(), "我点击了第" + pos + "项", Toast.LENGTH_SHORT).show();
    }
};

总结

套路都有了,多写写就会了哇,QAQ

猜你喜欢

转载自blog.csdn.net/menwaiqingshan/article/details/83856493