我正在尝试Android 5.0中的新工具栏小部件。所以我设置了工具栏的导航图标并尝试使用它。但是当我点击工具栏上的后退按钮时,出现以下错误:
FATAL EXCEPTION: main
java.lang.IllegalArgumentException: Invalid payload item type
at android.util.EventLog.writeEvent(Native Method)
at android.app.Activity.onMenuItemSelected(Activity.java:2628)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:350)
at android.support.v7.app.ActionBarActivity.onMenuItemSelected(ActionBarActivity.java:155)
at android.support.v7.app.ActionBarActivityDelegate$1.onMenuItemSelected(ActionBarActivityDelegate.java:74)
at android.support.v7.widget.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:44)
at android.support.v7.internal.widget.ToolbarWidgetWrapper$1.onClick(ToolbarWidgetWrapper.java:190)
at android.view.View.performClick(View.java:4211)
at android.view.View$PerformClick.run(View.java:17267)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)
此外,如果我使用手机后退按钮,我不会出错。它只是退出设置活动。
这是我的设置活动:
public class ActivitySettings extends ActionBarActivity {
private Toolbar toolbar;
private DrawerLayout drawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
initToolBar();
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(R.id.container, new FragmentSettings()).commit();
}
private void initToolBar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
// toolbar.setNavigationIcon(R.drawable.ic_drawer);
toolbar.setTitle(Html.fromHtml("<font color="white">"
+ getString(R.string.settings_header_title) + "</font>"));
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
}
还有我的安卓清单:
<activity
android:name=".ActivitySettings"
android:label="@string/settings_header_title"
android:parentActivityName=".ActivityMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ActivityMain" />
</activity>
我尝试清理解决方案,删除mafifest父活动名称并将单击侦听器设置为工具栏
toolbar.setNavigationOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
但它给出了同样的错误。
提前感谢!
设备: 三星银河S3
安卓:4.1.2
截图
问题出在
toolbar.setTitle(Html.fromHtml("<font color="white">sample text</font>"));
不知何故,Android 不允许使用 HTML 字符串设置标题。(它允许,但当您单击后退按钮时它会崩溃)我尝试添加CDATA,但它不起作用。
Html.fromHtml("<![CDATA[<font color="white">sample text</font>]]>");
因为我在AndroidManifest.xml
中设定了标题
android:label="@string/settings_header_title"
我只需要删除设置标题的行。
更多信息 这里 和 这里.
我的导航使用以下实现。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//implement action
}
}
问题实际上是在调用 setSupportActionBar 时在工具栏上设置了一个非字符串标题。它将在ToolbarWidgetWrapper中结束,当您单击导航菜单时,它将在其中使用。您可以在调用 setSuppportActionBar 后使用任何 CharSequence(例如 Spannable)。