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

Android Fragment 中自定義 View 獲取 FragmentManager

     編輯:程式設計綜合問答

問題

自定義 Footer extends RelativeLayout 中呼叫 getSupportFragmentManager() 報錯:undefined for type Footer。

原因

View 只有 getContext(),回傳 Context(通常是 Activity),但 Context 沒有 getSupportFragmentManager() 方法,只有 FragmentActivity 或 AppCompatActivity 有。

解決方案

// 在自定義 View 內部
FragmentActivity activity = (FragmentActivity) getContext();
FragmentManager fm = activity.getSupportFragmentManager();
// 或
FragmentManager fm = ((FragmentActivity) getContext()).getSupportFragmentManager();

更佳實踐:介面回調

避免 View 直接持有 Activity 參考,定義介面:

public interface FragmentNavigator {
    FragmentManager getSupportFragmentManager();
}

// Activity 實現介面
public class MainActivity extends AppCompatActivity implements FragmentNavigator { ... }

// View 建構子傳入介面
public Footer(Context context, FragmentNavigator navigator) {
    super(context);
    this.navigator = navigator;
}

降低耦合,利於測試與複用。

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