使用Fragment更改ActionBar标题

22
  • 我正在使用Actionbar。
  • 我有一个名为“收藏夹(Favorites)”的片段,我将一些联系人保存为收藏夹。
  • 当您单击其中一个联系人时,它会带我到另一个片段,并在editText中放置该联系人的号码。
  • 新片段称为“转账(Transfers)”。

所以我的问题是,当用户点击联系人时,它会将我带到另一个片段,但操作栏上的标题仍然是收藏夹的标题而不是新的标题,请问如何更改这个标题?

我已经尝试在单击方法中使用setTitle,但仍然无法工作。


请查看此链接 https://dev59.com/QWUp5IYBdhLWcg3wCUKx#46705242 - Ahmad Aghazadeh
6个回答

70

在您的活动中:

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

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

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

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

}

很棒的示例,我没有意识到onResume可以覆盖我的标题。 - skryshtafovych
1
更改完美,但在更改后保存到所有片段中。 - bhupathi turaga
如果我想要更改片段,由于我在BottomNavigationViewEx中有片段,它无法正常工作以更改片段。 - bugfreerammohan

25

在你的片段中

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;
}

11
如果您正在使用来自Android Jetpack的导航组件,操作栏将读取片段名称的标签属性。不确定这是否是适当的修复方法,但如果您在导航编辑器中更改标签文本,则设置在托管片段的活动中的supportActionBar将读取它。Navigation Editor Attributes Tab

我们可以使用Jetpack更改操作栏的字体吗? - Ali Asheer

4

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

override fun onStart() {
   super.onStart()

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

或者,您可以创建一个扩展函数并在片段内调用它。

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

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

调用碎片中的扩展函数。
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))
   }
}

1

用于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);
}

1

“NOT_A_PROGRAMMER”的回答是正确的,但是当您返回到之前的活动或片段时,标题仍然保持不变。

这是我的解决方案。

  • 在片段中重写OnPause()或OnStopMethod,并可以使用相同的方法“((MainFragmentActivity)getActivity()).setActionBarTitle("您的标题");”来设置位于后堆栈中的Activity或Fragment的标题。
    @Override
    public void onStop() {
        super.onStop();
        ((MPOSTransactionActivity) getActivity()).setActionBarTitle(getString(//NAME));
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接