gpt4 book ai didi

android - 从代码中调用 ActionBar 的向上按钮按下

转载 作者:太空狗 更新时间:2023-10-29 15:55:38 25 4
gpt4 key购买 nike

我正在编写一个启用了 ActionBar 的 Android 应用程序。在我的例子中,我使用 ActionBarSherlock 来提供兼容性,但我认为在这种情况下这并不重要。

我在 Activity 的 ActionBar 左侧显示了一个向上按钮。它在调用 setHomeAsUpEnabled(true); 后出现,并指向 HomeActivity。

我想编写一个测试用例来检查按下向上按钮是否会导致 HomeActivity。我正在使用 Robotium 在 UI 端编写测试,因此我可以通过以下断言检查当前 Activity 的类 solo.assertCurrentActivity(HomeActivity.class);但是我还没有找到一种方法来调用向上按钮的按下。

我已经尝试过 solo.clickOnView(solo.getView(android.R.id.home))getInstrumentation().invokeMenuActionSync(solo.getCurrentActivity(), android.R .id.home, 0); 但它们都不起作用。

如有任何帮助,我们将不胜感激。

最佳答案

我自己找到了一个解决方法,所以将它张贴在这里以防有人需要它。这段代码对我有用:

public static void clickOnUpActionBarButton(Activity activity) {
ActionMenuItem logoNavItem = new ActionMenuItem(activity, 0, android.R.id.home, 0, 0, "");
ActionBarSherlockCompat absc = (ActionBarSherlockCompat) UiTestUtils.invokePrivateMethodWithoutParameters(
SherlockFragmentActivity.class, "getSherlock", activity);
absc.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, logoNavItem);
}

首先,您需要通过调用 SherlockFragmentActivity 上的 getSherlock() 来获取 ActionBarSherlockCompat 对象。这个方法是 protected ,所以我使用反射 API 来调用它:

public static Object invokePrivateMethodWithoutParameters(Class<?> clazz, String methodName, Object receiver) {
Method method = null;
try {
method = clazz.getDeclaredMethod(methodName, (Class<?>[]) null);
} catch (NoSuchMethodException e) {
Log.e(TAG, e.getClass().getName() + ": " + methodName);
}

if (method != null) {
method.setAccessible(true);

try {
return method.invoke(receiver, (Object[]) null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}

return null;
}

您需要将 solo.getCurrentActivity() 传递到我的 clickOnUpActionBarButton(Activity activity) 方法,向上按钮将被按下。

关于android - 从代码中调用 ActionBar 的向上按钮按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com