我们在我们的应用程序中应用了新的Android KitKat半透明主题,当键盘出现时,我们遇到了一个奇怪的问题.如果我们不使用新android:windowTranslucentStatus
属性,则所有内容都照常工作:屏幕调整大小,并且所有内容都保持可见.但是当我们使用时android:windowTranslucentStatus
,屏幕不会调整大小,我们EditText
会被键盘隐藏.
问题的一个示例:
屏幕之间的唯一区别在于样式中的属性:
第一个屏幕:
<item name="android:windowTranslucentStatus">false</item>
第二个屏幕:
<item name="android:windowTranslucentStatus">true</item>
我们认为这是Kitkat发布的一个错误,但我们希望您了解这一点.我们有点生气了.当然,如果有人有解决方案,那将是惊人的.
编辑:我刚刚将此问题添加到Android问题跟踪器.您可能有兴趣主演此问题:https://issuetracker.google.com/issues/36986276
我们在GitHub有一个回购,它有3个分支.例如,说主人,开发人员和预览.
当我在Android Studio中检出这个仓库时,它似乎只检查主分支,忽略所有其他分支.(当我们从GitHub克隆一个repo时,Eclipse曾经问过我们要检查/导入哪个分支)
问题是:我们如何在检查到Android Studio的回购时选择一个分支?
图1-从GitHub退房
图2-它只是要求repo URL,但不是分支.
Kotlin如何在内部实现协同程序?
Coroutines被称为线程的"更轻版本",我知道它们在内部使用线程来执行协程.
当我使用任何构建器函数启动协程时会发生什么?
这是我对运行此代码的理解:
GlobalScope.launch { <---- (A)
val y = loadData() <---- (B) // suspend fun loadData()
println(y) <---- (C)
delay(1000) <---- (D)
println("completed") <---- (E)
}
Run Code Online (Sandbox Code Playgroud)
ThreadPool
在开始时有一个预定义.(A)
,Kotlin开始在下一个可用的免费线程中执行协程(Say Thread01
).(B)
,Kotlin停止执行当前线程,并loadData()
在下一个可用的空闲线程(Thread02
)中启动挂起功能.(B)
执行后返回时,科特林延续了协程的下一个可用的空闲线程(Thread03
).(C)
执行Thread03
.(D)
,Thread03
停止.(E)
在下一个免费线程上执行,比方说Thread01
.我理解正确吗?或者协程以不同的方式实现?
在自托管的GitLab安装中,我们如何通过Web界面在存储库中创建新目录?
在GitHub Web界面中,我们可以通过给出如下文件名来创建一个新目录:
/new-dir-name/new-file-name.md
Run Code Online (Sandbox Code Playgroud)
..which将创建一个名为的新目录并将new-dir-name/
文件new-file-name.md
放入其中.
但这不适用于GitLab 通过Web界面.我们应该怎么做?
(很明显,我们无法在git仓库中创建空目录.)
我有两种方向的一种布局 - 1 个横向和 1 个纵向。
/layout-land/main.xml
有两个片段:
<fragment android:id="@+id/fragment1" .. />
<fragment android:id="@+id/fragment2" .. />
/layout/main.xml
只有一个片段:
<fragment android:id="@+id/fragment1" .. />
这是MainActivity.java
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
firstFragment = (FirstFragment) getFragmentManager().findFragmentById(R.id.fragment1);
secondFragment = (SecondFragment) getFragmentManager().findFragmentById(R.id.fragment2);
}
Run Code Online (Sandbox Code Playgroud)
接下来,我开始MainActivity.java
横向模式。在这种情况下,
firstFragment
指secondFragment
布局中的片段layout-land/main.xml
然后我将屏幕旋转到纵向layout/main.xml
模式,并且应该加载布局文件。在这种情况下,
firstFragment
指的是R.id.fragment1
secondFragment
指的是不存在的片段。访问其中的任何元素都会引发 NullPointerException。(更准确地说,secondFragment
不在这里 null
)secondFragment
当布局内没有定义片段时,如何初始化它?
编辑:在 Android 开发者文档中找到的原因: http://developer.android.com/training/basics/fragments/creating.html:
当配置更改导致托管这些片段的活动重新启动时,其新实例可能会使用不同的布局,该布局不包含与先前布局相同的片段。在这种情况下,所有先前的片段仍将被实例化并在新实例中运行。但是,任何不再与视图层次结构中的标记关联的视图都不会创建其内容视图,并且会从 isInLayout() 返回 false。(此处的代码还展示了如何确定放置在容器中的片段是否不再在该容器的布局中运行,并避免在这种情况下创建其视图层次结构。)
public void signInWithLinkedIn(View view) {
//First check if user is already authenticated or not and session is valid or not
if (!LISessionManager.getInstance(this).getSession().isValid()) {
//if not valid then start authentication
LISessionManager.getInstance(getApplicationContext()).init(LinkedInActivity.this, buildScope()//pass the build scope here
, new AuthListener() {
@Override
public void onAuthSuccess() {
// Authentication was successful. You can now do
// other calls with the SDK.
Toast.makeText(LinkedInActivity.this, "Successfully authenticated with LinkedIn.", Toast.LENGTH_SHORT).show();
//on successful authentication fetch basic profile data of user
//LISessionManager.getInstance(getApplicationContext()).clearSession();
fetchBasicProfileData();
}
@Override
public void onAuthError(LIAuthError …
Run Code Online (Sandbox Code Playgroud) 我想做的是
...
int sum[];
...
for(int z.....){
...
sum[z] = some_random_value;
...
}
Run Code Online (Sandbox Code Playgroud)
但它给出了一个错误,sum[z]=ran;
即变量sum
可能尚未初始化.
我试过int sum[] = 0;
而不是,int sum[];
但即便是错误.(我基本上是一名C程序员)
我正在 kotlinlang.org 上阅读有关流程的文章:https ://kotlinlang.org/docs/flow.html
他们展示了下一个例子:
fun simple(): Flow<Int> = flow {
println("Flow started")
for (i in 1..3) {
delay(100)
emit(I)
}
}
fun main() = runBlocking<Unit> {
println("Calling simple function...")
val flow = simple()
println("Calling collect...")
flow.collect { value -> println(value) }
println("Calling collect again...")
flow.collect { value -> println(value) }
}
Run Code Online (Sandbox Code Playgroud)
他们说输出是:
Calling simple function...
Calling collect...
Flow started
1
2
3
Calling collect again...
Flow started
1
2
3
Run Code Online (Sandbox Code Playgroud)
因此,UI 线程似乎正在等待第一个flow.collect
函数完成,然后再继续打印“再次调用收集...”
我希望当第一个流程构建器运行时,系统将打印“再次调用收集...”,因此输出将是:
Calling simple function... …
Run Code Online (Sandbox Code Playgroud)