Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android教程之fragment通信

Android教程之fragment通信

編輯:關於Android編程

一、Activity與Fragment之間通信

1、Activity向Fragment傳值

在Activity中使用setArguments封裝所需傳遞的值,在Fragment中使用getArguments獲取值。
Activity代碼示例

Bundle bundle = new Bundle();
            bundle.putString("name", "zhangsan");
            fragment_a.setArguments(bundle);//注意,fragment被hide之後,不能使用setArguments方法

Fragment代碼示例

Bundle bundle = getArguments();
        if(bundle!=null){
            String name = bundle.getString("name");
            textview.setText(name);
        }

2、Fragment向Activity傳值

在Fragment中可以直接通過getActivity方法獲得宿主Activity對象,然後調用實例方法或實例變量。
Activity代碼示例

//在Activity中創建一個實例方法
public void showTips(){
        Toast.makeText(this, "來自fragment的提示請求", Toast.LENGTH_LONG).show();
    }

Fragment代碼示例

@Override
            public void onClick(View v) {
                MainActivity mActivity = (MainActivity) getActivity();//獲取Activity對象
                mActivity.showTips();//調用Activity中的實例方法
            }

這裡寫圖片描述

二、Fragment與Fragment之間通信

step1:在AFragment中創建實例方法或實例變量;
step2:在Activity中動態加載AFragment時,調用
add(int containerViewId, Fragment fragment, String tag)方法,tag是這個Fragment的名字,可自定義;
step3:在BFragment中通過
getActivity().getFragmentManager().findFragmentByTag(tag)方法即可獲得對應的Fragment對象,然後調用此Fragment中創建的實例方法或實例變量。
FragmentA代碼示例

FragmentB fb = (FragmentB) getActivity().getFragmentManager().findFragmentByTag("B");
                fb.changeTextB();

FragmentB代碼示例

public void changeTextB(){
        textview.setText("FragmentB文字已改變");
    }

Activity代碼示例

//將兩個fragment添加至事務中,並添加tag
ft.add(R.id.frame_content, fragment_a,"A");
ft.add(R.id.frame_content, fragment_b,"B");

注意:
FragmentA中調用FragmentB中的實例方法,一定要保證FragmentB已經提前添加至事務中。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved