使用片段更改 ActionBar 标题

Change ActionBar title using Fragments

所以我的问题是,当用户点击联系人时,我会转到另一个片段,但操作栏上的标题仍然是最喜欢的标题,而不是新标题,如何更改该标题?

我已经尝试在点击方法上使用setTitle,但仍然无效。

在你的activity中:

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

并在您的片段中(您可以将其放在 onCreate 或 onResume 中):

 public void onResume(){
        super.onResume();

    // Set title bar
    ((MainFragmentActivity) getActivity())
            .setActionBarTitle("Your title");

}

在你的片段中

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    getActivity().setTitle("Team B");

    View rootView = inflater.inflate(R.layout.fragment_team_b, container, false);

    return rootView;
}

如果您使用的是来自 Android Jetpack 的导航组件。操作栏读取片段名称的标签属性。不确定这是否是一个正确的修复,但如果您在导航编辑器中更改标签文本,它将被在托管片段的 Activity 中设置的 supportActionBar 读取。

在 Kotlin 中,您可以在函数中使用以下代码:onCreateView、onStart 和 onResume。

override fun onStart() {
   super.onStart()

   (activity as? AppCompatActivity)?.supportActionBar?.title = "Título".
}

或者,如果您愿意,可以创建一个扩展函数并在 Fragment 中调用它。

import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment

fun Fragment.setTitle(title: String) {
    (activity as? AppCompatActivity)?.supportActionBar?.title = title
}

在Fragment中调用扩展函数。

class StartFragment : Fragment() {

   override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
   ): View? {
       return inflater.inflate(R.layout.fragment_start, container, false)
   }

   override fun onStart() {
       super.onStart()

       this.setTitle(getString(R.string.titulo))
   }
}

NOT_A_PROGRAMMER的答案是正确的,但是当你回到之前的activity或片段时,标题保持不变。

这是我的解决方案。

  • 覆盖片段中的 OnPause() 或 OnStopMethod,您可以使用相同的方法“((MainFragmentActivity) getActivity()).setActionBarTitle("Your title"); " 设置 Activity 或出现在后台堆栈中的片段的标题。
    @Override
    public void onStop() {
        super.onStop();
        ((MPOSTransactionActivity) getActivity()).setActionBarTitle(getString(//NAME));
    }

供java使用
更改工具栏的标题

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    ((MainActivity) getActivity()).getSupportActionBar().setTitle("hello word");

    View root = inflater.inflate(R.layout.fragment_home, container, false);
    return root;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}