`MainActivity` 包含 `ViewPager` + 3 個 Fragment。其中「個人中心」Fragment 內有按鈕跳轉到「消息」Fragment,需將 Toolbar/ActionBar 標題從「個人中心」改為「消息」。
**Fragment 無直接訪問 Window 的權限**,必須通過 `getActivity()` 獲取宿主 Activity,再調用 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);
}
}
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;
}
}
// 在 PersonCenterFragment 的 onResume 或 onHiddenChanged 中
@Override
public void onResume() {
super.onResume();
MainActivity activity = (MainActivity) getActivity();
if (activity != null) {
activity.setToolbarTitle("個人中心");
}
}
原最佳回答「在 fragment 裡用 getActivity 獲得 activity 實例,然後調用 activity 中改變 title 的方法」方向正確,上文提供完整可複製代碼與生命週期恢復邏輯。