使用片段更改 ActionBar 标题
Change ActionBar title using Fragments
- 我正在使用操作栏。
- 我有一个片段调用收藏夹,我将一些联系人保存为收藏夹。
- 当您单击一个联系人时,它会将我带到另一个片段并将联系人号码放在 editText 上。
- 新片段是呼叫转接。
所以我的问题是,当用户点击联系人时,我会转到另一个片段,但操作栏上的标题仍然是最喜欢的标题,而不是新标题,如何更改该标题?
我已经尝试在点击方法上使用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);
}
- 我正在使用操作栏。
- 我有一个片段调用收藏夹,我将一些联系人保存为收藏夹。
- 当您单击一个联系人时,它会将我带到另一个片段并将联系人号码放在 editText 上。
- 新片段是呼叫转接。
所以我的问题是,当用户点击联系人时,我会转到另一个片段,但操作栏上的标题仍然是最喜欢的标题,而不是新标题,如何更改该标题?
我已经尝试在点击方法上使用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);
}