首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Fragment 參數傳遞:XML 靜態聲明與動態添加的最佳實踐

     編輯:程式設計綜合問答

場景一:XML 靜態聲明 Fragment

<fragment
    android:id="@+id/my_fragment"
    android:name="com.example.MyFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

參數傳遞方式:無法通過構造函數傳參。需在 Activity `onCreate` 中:

MyFragment fragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.my_fragment);
Bundle args = new Bundle();
args.putString("key", "value");
fragment.setArguments(args); // Fragment 內部 getArguments() 獲取

場景二:動態添加 Fragment

MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putInt("id", 123);
fragment.setArguments(args);

getSupportFragmentManager().beginTransaction()
    .add(R.id.container, fragment, "tag")
    .commit();

關鍵規則

  • XML 聲明:只能 `findFragmentById` 獲取實例,不能** `new Fragment()` 後再 `add`**,否則會與 XML 實例衝突導致崩潰。
  • 構造函數:Fragment **必須提供無參構造函數**,系統重建時會調用;參數唯一通道是 `setArguments(Bundle)`。
  • 生命週期:`setArguments` 必須在 Fragment 加入容器前調用,建議在 `newInstance` 靜態工廠方法中封裝。

推薦模板

public class MyFragment extends Fragment {
    public static MyFragment newInstance(String param) {
        MyFragment f = new MyFragment();
        Bundle b = new Bundle();
        b.putString("arg", param);
        f.setArguments(b);
        return f;
    }
    // ...
}

Android Fragment 參數傳遞,XML 靜態聲明用 setArguments,動態添加用 newInstance 工廠模式,避免構造函數傳參導致重建失敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved