我已经在网上搜索了这个问题的答案,但似乎找不到一个,即使在官方的Android文档中也是如此.
我正在创建一个实现Android新导航抽屉布局的应用程序.可以在此处和此处找到此布局的文档.
在设计文档以及Facebook和Google Currents等众多流行应用中,抽屉物品前面都有图标.
设计文档本身在"导航抽屉的内容"下提到它们
导航目标可以具有可选的前导图标以及尾随计数器.使用计数器通知用户相应视图中数据的更改状态.
不幸的是,Developer文档没有提到如何在此设置中实现图标.它描述了如何实现项目列表:
public class MainActivity extends Activity {
private String[] mPlanetTitles;
private ListView mDrawerList;
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPlanetTitles = getResources().getStringArray(R.array.planets_array);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
// Set the adapter for the list view
mDrawerList.setAdapter(new ArrayAdapter<String>(this,
R.layout.drawer_list_item, mPlanetTitles));
// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
...
}
}
Run Code Online (Sandbox Code Playgroud)
因为它们的实现使用getStringArray(),所以我无法想到修改行项目的xml以包含图标.
这是令人困惑的,因为许多应用程序似乎在每个文本项之前实现图标就好了,而设计文档甚至引用了添加图标.我觉得必须有一些简单的API调用来完成添加这些图标,但到目前为止我发现的唯一实现看起来非常复杂.
有谁知道如何在导航抽屉项目中添加图标?有没有办法通过一个简单的API调用来做到这一点,或者所有这些公司(Facebook,谷歌等)必须找到解决问题的方法?
感谢大家.
我有一个ES6模块,默认情况下导出一个React Component类,但也导出一个普通的JS函数作为命名导出.在测试使用此模块的其他软件包时,我想模拟默认导出组件和命名导出函数,以保持单元测试的纯净.
该模块看起来像这样:
import React, { Component } from 'react';
export default class MyComponent extends Component {
render() {
return <div>Hello</div>
}
}
export function myUtilityFunction() { return 'foo' };
Run Code Online (Sandbox Code Playgroud)
我想使用以下语法来模拟导出:
import React from 'react';
import MyComponent, { myUtilityFunction } from './module';
jest.mock('./module');
MyComponent.mockImplementation(() => 'MockComponent');
myUtilityFunction.mockImplementation(() => 'foo');
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用此语法时,在其他组件中使用时,MyComponent似乎不会被模拟.当我尝试像这样模拟MyComponent并自己渲染它时,它会呈现为null.
这种行为很奇怪,因为如果我使用完全相同的语法,但两个导入都是JavaScript函数,则模拟按预期工作.请参阅我在此处打开的StackOverflow问题,该问题确认当导入都是函数时语法有效.
这是一个演示问题的GitHub仓库,以及我尝试过的几个解决方案:https://github.com/zpalexander/jest-enzyme-problem
您可以构建repo并使用yarn install && yarn test运行测试
谢谢!
我有一个带有默认和命名导出的ES6模块:
/** /src/dependency.js **/
export function utilityFunction() { return false; }
export default function mainFunction() { return 'foo'; }
Run Code Online (Sandbox Code Playgroud)
它被第二个ES6模块使用:
/** /src/myModule.js **/
import mainFunction, { utilityFunction } from './dependency';
// EDIT: Fixed syntax error in code sample
// export default myModule() {
export default function myModule() {
if (!utilityFunction()) return 2;
return mainFunction();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Jest为myModule.js编写单元测试.但是当我尝试模拟命名和默认导入时,Jest似乎只模拟命名导入.它继续使用默认导入的实际实现,并且即使在我调用.mockImplementation()之后也不允许我模拟它.这是我正在尝试使用的代码:
/**
* Trying to mock both named and default import.
* THIS DOESN'T WORK.
*/
/** /tests/myModule.test.js **/
import mainFunction, { utilityFunction } from …Run Code Online (Sandbox Code Playgroud)