Exception:must implement OnFragmentInteractionListener
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/parallelyk/article/details/51510569
今天寫代碼的時(shí)候發(fā)現(xiàn),用Android Studio創(chuàng)建一個(gè)blank Fragment的時(shí)候會(huì)為我們創(chuàng)建一個(gè)Fragment的模板。
public class MainFragment extends Fragment {// TODO: Rename parameter arguments, choose names that match// the fragment initialization parameters, e.g. ARG_ITEM_NUMBERprivate static final String ARG_PARAM1 = "param1";private static final String ARG_PARAM2 = "param2";// TODO: Rename and change types of parametersprivate String mParam1;private String mParam2;private OnFragmentInteractionListener mListener;public MainFragment() {// Required empty public constructor}/*** Use this factory method to create a new instance of* this fragment using the provided parameters.** @param param1 Parameter 1.* @param param2 Parameter 2.* @return A new instance of fragment MainFragment.*/// TODO: Rename and change types and number of parameterspublic static MainFragment newInstance(String param1, String param2) {MainFragment fragment = new MainFragment();Bundle args = new Bundle();args.putString(ARG_PARAM1, param1);args.putString(ARG_PARAM2, param2);fragment.setArguments(args);return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getArguments() != null) {mParam1 = getArguments().getString(ARG_PARAM1);mParam2 = getArguments().getString(ARG_PARAM2);}}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_main, container, false);}// TODO: Rename method, update argument and hook method into UI eventpublic void onButtonPressed(Uri uri) {if (mListener != null) {mListener.onFragmentInteraction(uri);}}@Overridepublic void onAttach(Context context) {super.onAttach(context);if (context instanceof OnFragmentInteractionListener) {mListener = (OnFragmentInteractionListener) context;} else {throw new RuntimeException(context.toString()+ " must implement OnFragmentInteractionListener");}}@Overridepublic void onDetach() {super.onDetach();mListener = null;}/*** This interface must be implemented by activities that contain this* fragment to allow an interaction in this fragment to be communicated* to the activity and potentially other fragments contained in that* activity.* <p/>* See the Android Training lesson <a href=* "http://developer.android.com/training/basics/fragments/communicating.html"* >Communicating with Other Fragments</a> for more information.*/public interface OnFragmentInteractionListener {// TODO: Update argument type and namevoid onFragmentInteraction(Uri uri);} }其中有一段: if (context instanceof OnFragmentInteractionListener) {mListener = (OnFragmentInteractionListener) context;} else {throw new RuntimeException(context.toString()+ " must implement OnFragmentInteractionListener");}
即我們的context也就是Activity必須實(shí)現(xiàn)OnFragmentInteractionListener。
那么OnFragmentInteractionListener是什么東西?
在一個(gè)Activity中往往有多個(gè)Fragment,他們之間是無法直接通信的,所以Fragment需要通過它們所綁定的Activity作為中介來進(jìn)行通信。而OnFragmentInteractionListener就是用來實(shí)現(xiàn)不同F(xiàn)ragment之間通信的接口。OnFragmentInteractionListener在OnAttach階段注冊(cè)并復(fù)制給mListener。
使用:在Fragment中直接調(diào)用mListener.OnFragmentInteractionListener(uri)
mListener.OnFragmentInteractionListener(uri)在Activity中通過
@Overridepublic void onFragmentInteraction(Uri uri) {//做想要做的數(shù)據(jù)操作和通信,如給其他Fragment發(fā)送數(shù)據(jù)sendMsgTo(otherFragment,uri);}
總結(jié)
以上是生活随笔為你收集整理的Exception:must implement OnFragmentInteractionListener的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (附源码)ssm财务管理系统 毕业设计
- 下一篇: Android开发系列(十一) QQ登陆