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

Android Fragment 間跳轉時動態修改標題欄標題

     編輯:程式設計綜合問答

場景

`MainActivity` 包含 `ViewPager` + 3 個 Fragment。其中「個人中心」Fragment 內有按鈕跳轉到「消息」Fragment,需將 Toolbar/ActionBar 標題從「個人中心」改為「消息」。

核心思路

**Fragment 無直接訪問 Window 的權限**,必須通過 `getActivity()` 獲取宿主 Activity,再調用 Activity 的標題修改方法。

實現步驟

1. Activity 定義公共修改標題方法

public class MainActivity extends AppCompatActivity {
    private Toolbar toolbar;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // 初始化 ViewPager、Fragment 等
    }
    
    // 供 Fragment 調用
    public void setToolbarTitle(String title) {
        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle(title);
        }
        // 或直接操作 Toolbar
        // toolbar.setTitle(title);
    }
}

2. Fragment 中調用

public class PersonCenterFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_person, container, false);
        
        Button btnMsg = view.findViewById(R.id.btn_message);
        btnMsg.setOnClickListener(v -> {
            // 1. 切換 Fragment(假設用 FragmentTransaction)
            getParentFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, new MessageFragment())
                .addToBackStack(null)
                .commit();
            
            // 2. 修改標題 —— 關鍵代碼
            MainActivity activity = (MainActivity) getActivity();
            if (activity != null) {
                activity.setToolbarTitle("消息"); // 或 getString(R.string.msg_title)
            }
        });
        return view;
    }
}

3. 返回時恢復標題(可選)

// 在 PersonCenterFragment 的 onResume 或 onHiddenChanged 中
@Override
public void onResume() {
    super.onResume();
    MainActivity activity = (MainActivity) getActivity();
    if (activity != null) {
        activity.setToolbarTitle("個人中心");
    }
}

關鍵點總結

  • ✅ `getActivity()` 返回宿主 Activity 實例(需強轉為具體類)。
  • ✅ 在 Activity 封裝 `setToolbarTitle()` 統一邏輯,支持 Toolbar/ActionBar 兼容。
  • ✅ 切換 Fragment 後**立即調用**,避免標題閃爍。
  • ⚠️ 若使用 `Navigation Component`,建議在 `nav_graph.xml` 給每個 destination 設 `android:label`,框架自動處理。

原回答補充

原最佳回答「在 fragment 裡用 getActivity 獲得 activity 實例,然後調用 activity 中改變 title 的方法」方向正確,上文提供完整可複製代碼與生命週期恢復邏輯。

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