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

Android Fragment UI 不顯示:缺少在 XML 中聲明或動態添加邏輯

     編輯:程式設計綜合問答

問題分析

代碼中 Activity 佈局只有一個 FrameLayout 容器,但 未在 XML 中聲明 Fragment,也未在動態事務中指定正確的 Fragment 類。

錯誤代碼

Fragment m_f_text_entry_activity = m_fm_text_entry_activity.findFragmentById(R.id.fragmentContainer_TextEntry);
if (m_f_text_entry_activity == null) {
    m_f_text_entry_activity = new Fragment(); // 錯誤:實例化基類 Fragment,無 UI
    m_fm_text_entry_activity.beginTransaction()
        .add(R.id.fragmentContainer_TextEntry, m_f_text_entry_activity)
        .commit();
}

修正方案一:XML 靜態聲明 (推薦簡單頁面)

activity_text_entry.xml:

<FrameLayout ...>
    <fragment
        android:name="com.app.journal_v001.TextEntryFragment"
        android:id="@+id/fragmentContainer_TextEntry"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

Activity 只需 setContentView,Fragment 自動實例化並調用生命周期。

修正方案二:動態添加 (正確姿勢)

public class TextEntryActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_text_entry); // 僅含 FrameLayout 容器

        if (savedInstanceState == null) { // 防止重疊
            getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragmentContainer_TextEntry, new TextEntryFragment())
                .commit();
        }
    }
}

Fragment 類實現

public class TextEntryFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_text_entry, container, false);
    }
}

關鍵點

  • 動態添加必須 實例化具體 Fragment 子類,而非基類 new Fragment()。
  • 容器 ID 必須一致 (R.id.fragmentContainer_TextEntry)。
  • 使用 replace 而非 add 避免重疊;判斷 savedInstanceState == null 防旋轉重建重複添加。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved