我的活动中有此代码:
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
它正在根据日志进行更改,但未反映在UI中。请帮助我!
7条答案
按热度按时间uelo1irk1#
好吧,最后,在这个愚蠢的事情上花了2天之后,我得到了解决方案(我会说变通办法)。
这可能是一个嵌套的
Fragment
错误。我有嵌套的Fragment结构。正如我们所知,
Fragment.getActivity()
返回父Activity
。经过大量调试,我观察到,如果您在方向更改后调用getActivity()
(甚至在Fragment.onActivityCreated()
内部),它将返回旧Activity
的引用,除了在最顶部的父片段中,它将正确返回新创建的Activity
。所以我写了这个方法从任意
Fragment
中获取当前Activity
:ejk8hzay2#
你需要看到的答案写的sorianiv在这里:In android app Toolbar.setTitle method has no effect – application name is shown as title
添加额外的
toolbar.setTitle("")
为我解决了这个问题。brqmpdu13#
我刚刚遇到了同样的问题,我通过使用
getSupportActionBar
而不是toolbar
解决了它。igsr9ssn4#
当你旋转屏幕的时候,你的activity被重新创建,所以onCreate被再次调用,你没有在那里设置一个标题。
将以下内容添加到onCreate:
xuo3flqw5#
也许你可以改变你的动作栏/工具栏,在你的活动中的onPostCreate()方法中。代码很简单。我多次尝试改变我的模拟器/设备方向,它工作起来很有魅力。
ki0zmccv6#
我也遇到了这个问题,因为工具栏的标题在onCreateView设置为空(“”),但屏幕旋转后,标题栏显示的应用程序名称而不是空字符串。这我也尝试在onResume设置空字符串,最后它的工作!谢谢
au9on6nz7#
在清单文件中添加
或onConfigChange()中的代码