当前位置: 首页 > 知识库问答 >
问题:

工具栏(SupportActionBar)标题在方向更改时更改为应用程序名称

凤扬
2023-03-14

我在活动中有以下代码:

protected void onCreate(Bundle savedInstanceState) {
    ...
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
      actionBar.setDisplayHomeAsUpEnabled(true);
    }
    ...
}

我正在从onresume()中的不同片段更新ActionBar标题,如下所示:

ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (actionBar != null) {
    actionBar.setTitle(title);
}
final ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
if (actionBar != null) {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Log.d("SWAPNIL", "IN RUN BEFORE: " + actionBar.getTitle());
            actionBar.setTitle(title);
            Log.d("SWAPNIL", "IN RUN AFTER : " + actionBar.getTitle());
        }
    }, 3000);
}
10-13 10:27:04.526 3719-3719/com.example.xxxx D/SWAPNIL: onResumeHelp
10-13 10:27:07.528 3719-3719/com.example.xxxx D/SWAPNIL: IN RUN BEFORE: MY APP NAME
10-13 10:27:07.528 3719-3719/com.example.xxxx D/SWAPNIL: IN RUN AFTER : title
10-13 10:27:21.012 3719-3719/com.example.xxxx D/SWAPNIL: onResumeHelp
10-13 10:27:24.013 3719-3719/com.example.xxxx D/SWAPNIL: IN RUN BEFORE: title
10-13 10:27:24.013 3719-3719/com.example.xxxx D/SWAPNIL: IN RUN AFTER : title

共有1个答案

班泽语
2023-03-14

好吧,最后,在花了两天时间在这个愚蠢的事情上,我得到了解决方案(我会说变通)。

这可能是嵌套的片段错误。

我有嵌套片段结构。正如我们所知,fragment.getactivity()返回父级activity。经过大量调试后,我注意到如果在方向改变后调用getactivity()(fragment.onactivitycreate()),它会返回旧的活动的引用,除非在最上层的父片段中正确地返回新创建的活动。

因此,我编写了这个方法来从任何片段获取当前活动:

/**
 * When inside a nested fragment and Activity gets recreated due to reasons like orientation
 * change, {@link android.support.v4.app.Fragment#getActivity()} returns old Activity but the top
 * level parent fragment's {@link android.support.v4.app.Fragment#getActivity()} returns current,
 * recreated Activity. Hence use this method in nested fragments instead of
 * android.support.v4.app.Fragment#getActivity()
 *
 * @param fragment
 *  The current nested Fragment
 *
 * @return current Activity that fragment is hosted in
 */
public Activity getActivity(Fragment fragment) {
    if (fragment == null) {
        return null;
    }
    while (fragment.getParentFragment() != null) {
        fragment = fragment.getParentFragment();
    }
    return fragment.getActivity();
}
 类似资料:
  • 我的android应用程序有一个工具栏,我想改变它的标题。我使用了toolbar.settitle(),但它不起作用...请帮忙。我该怎么办?我尝试了getSupportActionBar().setTitle(),但它不起作用。

  • 如何从工具栏中获取图标以更改为使用bbdd中看到的方法获得的新图标。问题是我无法访问更新活动的事件以更改图标。我尝试使用onPreareOptionsMenu方法,但无法使其工作。我无法通过将代码放入onStart来做到这一点,因为它告诉我菜单对象为空或无效。 我的活动由AppCompactActive扩展并通过AdapterView加载。当我返回片段对话框或从下一个活动开始时,我遇到了问题。 谢

  • 我尝试这样更改我的AndroidManifest: 但现在这个名字到处都是(在主页和应用程序的标题上)“[T]ime[T]racking[M]anager”。我怎么能给他们起不同的名字呢?

  • 我正在整合黑暗模式,我有折叠工具栏和包装在appbarlayout中的工具栏,问题是当我尝试设置工具栏标题颜色为白色时,暗模式设置,它是不工作的同时,在亮模式,颜色显示相应,我尝试了几乎所有但我不知道确切地发生了什么,我有颜色和颜色夜文件夹,我为两者设置了颜色,并添加到我的工具栏,但它没有改变任何东西,如果有人可以帮助,我将深深感谢它,谢谢 这是我的xml代码 这是彩色文件夹 这是夜间文件夹

  • 问题内容: 当我更改collapsesingToolbar的标题时,标题不变。 我已经尝试过getSupportActionBar.setTitle和crashToolbar.setTitle,但这没有帮助。告诉我,怎么了? 问题答案: 我相信这个问题描述了您所遇到的问题。我也遇到了这个问题,并且今天已经解决了。本质上,处理折叠文本的代码仅在当前文本为null或文本大小更改时更新文本。当前,这是一

  • 我刚刚完成了我的第一个android应用程序,并生成了一个apk文件在我的手机上测试。然后我意识到我在制作项目时留下了默认的“My Application”名称。所以安装的应用程序名为“我的应用程序”。如何更改应用程序的名称?