Fragment與Activity的相互通信

FragmentActivity向Fragment中傳遞參數我想不用我說太多大家都知道,在此只做簡單的說明:
FragmentActivity傳遞參數給Fragment使用:

Bundle bundle = new Bundle();
Fragment.setArguments(bundle)

Fragment中獲取數據使用:

Bundle bundle = getArguments();

下面我重點說下FragmentActivity與Fragment間的相互通信

首先定義一個公共接口

/**
 * FragmentActivity 與 Fragment交互接口 
 */
public interface IMutualListener {

    /**
     * FragmentActivity用來改變Fragment中的展示內容
     */
    void actMsg(String str);

    /**
     * Fragment用來改變FragmentActivity中的展示內容
     */
    void fragmentMsg(String str);

}

FragmentActivity與Fragment分別去實現這個接口, 且Activity中需要重寫onAttachFragment方法、而Fragment中需要重寫onAttach方法事例如下:

/**
 * FragmentActivity中調用接口的方式
 */
public class MainActivity extends FragmentActivity implements  IMutualListener{

    private IMutualListener iMutualListener;
    private TextView tv;
    @Override  
  protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);
     tv = (TextView)findViewById(R.id.tv)
        //改變fragment中的值
    findViewById(R.id.btn).setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                //FragmentActivity調用Fragment中方法前需要判斷該Fragment是否為null
                iMutualListener.actMsg("我是來自FragmentActivity的信息");
            }
        });  
    
  }  

    @Override
    public void onAttachFragment(Fragment fragment) {
        try{
            iMutualListener = (IMutualListener)fragment;
        }catch (Exception e){}
        super.onAttachFragment(fragment);
    }

    /**
     * FragmentActivity用來改變Fragment中的展示內容
     */
    @Override
    public void actMsg(String str) {}

    /**
     * Fragment用來改變FragmentActivity中的展示內容
     */
    @Override
    public void fragmentMsg(String str) {
        tv.setText(str);
    }
}
/**
 * Fragment中調用接口的方式
 */
 public class FragmentA extends Fragment implements  IMutualListener{

    private IMutualListener iMutualListener;
    private TextView tv;
     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = View.inflate(getActivity(), R.layout.fragment_a_page, null);
        tv = (TextView) view.findViewById(R.id.tv)
        //改變fragmentActivity中的值
    view.findViewById(R.id.btn).setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                iMutualListener.fragmentMsg("我是來自Fragment的信息");
            }
        });  
    }

    @Override
    public void onAttach(Activity activity) {

        try {
            iMutualListener = (IMutualListener)activity;
        }catch (Exception e){
            throw new ClassCastException(activity.toString() + "must implement iMutualListener");
        }

        super.onAttach(activity);
    }

    /**
     * FragmentActivity用來改變Fragment中的展示內容
     */
    @Override
    public void actMsg(String str) {
        tv.setText(str);
    }

    /**
     * Fragment用來改變FragmentActivity中的展示內容
     */
    @Override
    public void fragmentMsg(String str) {}

 }

FragmentActivity與Fragment的交互主要部分就是onAttachFragment與onAttach方法的重寫,希望本篇文章能對你有所幫助!

201707071316.jpg
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容