我正在尝试从默认的android迁移AlertDialog
到appCompat-22.1中包含的新的android 到目前为止我了解你只需导入android.support.v7.app.AlertDialog
包以便使用它.
但我怎么样呢呢?例如,更改正/负按钮颜色,标题颜色,消息颜色和背景颜色?
android android-appcompat android-alertdialog android-support-library
我在Android Studio中运行单元测试.我有一个Java类,使用以下代码加载本机库
static
{
System.loadLibrary("mylibrary");
}
Run Code Online (Sandbox Code Playgroud)
但是当我在我的src/test
目录中测试这个类时,我得到了
java.lang.UnsatisfiedLinkError: no mylibrary in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
Run Code Online (Sandbox Code Playgroud)
如何才能找到原生.so库的路径,src/main/libs
以便进行单元测试而不出错?
注:里面src/main/libs
的目录我有3个子目录:armeabi
,mips
和x86
.其中每一个都包含正确的.so文件.我正在使用非实验版本来构建NDK库.
我不想使用其他第三方测试库,因为我所有其他"纯"java类都可以进行单元测试.但如果那是不可能的,那么我愿意接受替代方案.
这是我的测试代码,它会抛出错误
@Test
public void testNativeClass() throws Exception
{
MyNativeJavaClass test = new MyNativeJavaClass("lalalal")
List<String> results = test.getResultsFromNativeMethodAndPutThemInArrayList();
assertEquals("There should be only three result", 3, results.size());
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试从Google分析迁移到新的Firebase分析,但我注意到还有广告库.firebase广告是否也将取代admob广告?我应该继续通过谷歌播放服务使用admob吗?或者切换到Firebase SDK?反正有什么不同?
我刚刚将google play服务更新为rev 22,并且该LocationClient
课程似乎缺失了.到底是怎么回事?
好的,我真的很困惑如何使用最新的appcompat v23.0.1正确地创建自定义对话框这里有几种方法
第一种方式:
public class AddTipDialogFrag extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
int title = getArguments().getInt("title");
AppCompatDialog dialogCompat = new AppCompatDialog(getActivity(), R.style.MyAlertDialogStyle);
dialogCompat.setTitle(title); //doesn't work btw
dialogCompat.setContentView(R.layout.add_tip_fragment);
return dialogCompat;
}
}
Run Code Online (Sandbox Code Playgroud)
第二种方式:
public class AddTipDialogFrag extends AppCompatDialogFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.add_tip_fragment,container, false);
int title = getArguments().getInt("title");
getDialog().setTitle(title);
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
两种方式似乎产生相同的结果.我个人更喜欢第一种方式,但是当连线视图边框结束时会出现涟漪效应问题,如下图所示.
这是一个错误吗?(一定是!)我可以修复它还是应该转换到第二种方式?(这对涟漪效果很好).考虑到大多数材料对话框库使用第一种方式,这两种方法之间的最佳方法是什么?
编辑:第一种方式上的波纹故障似乎不再发生,所以我仍然不确定哪两种是正确的方式.
android android-appcompat android-dialog android-dialogfragment
到目前为止,我曾经在活动/片段或 ViewModel 中收集我的流,如下所示
活动/片段
lifecycleScope.launch {
myViewModel.readTokenCredentials().collect { data -> /* do something */ }
}
Run Code Online (Sandbox Code Playgroud)
视图模型
viewModelScope.launch {
prefsRepo.readTokenCredentials().collect { data -> /* do something */ }
}
Run Code Online (Sandbox Code Playgroud)
现在,谷歌开发人员告诉我们,这不是一种收集流量的安全方法,因为它可能会导致内存泄漏。相反,他们建议将集合包装在lifecycle.repeatOnLifecycle
“活动/片段”中以进行流集合。
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
myViewModel.readTokenCredentials().collect { data -> /* do something */ }
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
为什么在视图模型内收集流时不能使用repeatOnLifecycle
with ?viewModelScope
当然,我知道视图模型不具有生命周期意识,但viewModelScope
在流收集期间可能不太可能引入内存泄漏?
我在尝试过早地从 Flow 中取消时注意到一个奇怪的行为。看看下面的例子。
这是一个发出整数值的简单流程
private fun createFlow() = flow {
repeat(10000) {
emit(it)
}
}
Run Code Online (Sandbox Code Playgroud)
然后我createFlow
使用此代码调用该函数
CoroutineScope(Dispatchers.Main).launch {
createFlow().collect {
Log.i("Main", "$it isActive $isActive")
if (it == 2) {
cancel()
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是打印出来的
0 isActive true
1 isActive true
2 isActive true
3 isActive false
4 isActive false
etc...etc
Run Code Online (Sandbox Code Playgroud)
现在我希望流一旦达到 2 的值就应该停止发射整数,但实际上它会将 isActive 标志切换为 false 并继续发射而不停止。
当我在排放之间添加延迟时,流量的行为与我预期的一样。
private fun createFlow() = flow {
repeat(10000) {
delay(500) //add a delay
emit(it)
}
}
Run Code Online (Sandbox Code Playgroud)
这是再次调用流程后打印出来的内容(这是预期的行为)。
0 isActive true
1 …
Run Code Online (Sandbox Code Playgroud) 我想根据屏幕尺寸调整图像大小,但是当屏幕太大时我不希望该图像超过其实际像素.到目前为止,我设法做到了这一点
<div align="center" style="position:static; height: 100%; width: 100%; top:0;left 0;">
<img src="myImg.png" style="width: 80%">
</div>
Run Code Online (Sandbox Code Playgroud)
这样可以保持我想要的比例,但是当屏幕太大时,它也会拉伸图像.我不希望这样.
如何以编程方式确定用户是否可以看到权限对话框,以便我知道在这种情况下该怎么做?
我和我的同事正在争论哪里才是将实体对象或远程 dto 对象映射到简单域对象的正确位置。
我们的结构看起来像这样。
源(包括 dao)> 存储库(包括源)> 用例(包括存储库)
我的同事认为映射到域应该在源内部完成,以便域对象可以传递到下一层,如下所示
class SomeSourceImpl(private val dao: Dao) : SomeSource {
override fun get(): Observable<DomainModel> {
return dao.getResponse().map { it.mapToDomain() }
}
}
Run Code Online (Sandbox Code Playgroud)
我的同事认为,根据鲍勃叔叔的说法,这是由于依赖规则造成的。
该规则规定源代码依赖关系只能指向内部。内圈中的任何事物都无法了解外圈中的任何事物。特别是,在内圈中的代码中不得提及外圈中声明的内容的名称。这包括函数、类。变量,或任何其他命名的软件实体。
我非常不同意直接映射到源内部域的方法,因为这样存储库就会变得贫乏,我们因此采用贫乏存储库无用的反模式,它们所做的就是盲目传播来自源的所有内容。(现在你可能会说源也很贫乏,我们可以简单地删除它们并将 dao 对象直接包含到存储库中,但这在我们的例子中是不可能的)。
相反,我建议源返回原始数据库实体(如果我们进行休息调用,则返回远程实体),因为源返回原始数据以供以后处理是有意义的。存储库的工作是从源获取结果,然后将其映射到域,最后将此域对象传播到类似这样的用例。
class SomeRepoImpl(private val someSource: SomeSource) : SomeRepo {
override fun get(haId: String): Observable<DomainModel> {
return otherAssetSource.get().map { it.mapToDomain() }
}
Run Code Online (Sandbox Code Playgroud)
我还在 github 上发现了一些示例,它们映射到存储库内的域而不是源
这也是 iOS 版的
关于可以将实体映射到域对象的位置,干净架构原则中的严格规则是什么?
android ×9
kotlin ×2
admob ×1
css ×1
eclipse-luna ×1
firebase ×1
html ×1
java ×1
junit4 ×1
unit-testing ×1