我发现了很多关于这个主题的东西,但还不足以解决它,所以我就开始吧。
我刚刚开始一个新项目,他们遇到了一个严重的问题:
import kotlinx.android.synthetic
Run Code Online (Sandbox Code Playgroud)
Android Studio 无法解决。项目运行起来,构建过程中没有问题,但是 Android Studio 在代码中向我显示了很多错误,因为它无法识别布局。这意味着布局/组件没有快捷方式。
我认为我们已经导入了正确的插件:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'org.jetbrains.kotlin.android.extensions'
Run Code Online (Sandbox Code Playgroud)
我尝试删除 apply plugin: 'org.jetbrains.kotlin.android.extensions',但没有帮助。我们的构建脚本依赖项中还有类路径“org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”。
不是 Gradle 专家,但欢迎寻求任何帮助!
我有一个数据类,其中包含一个名为“prio”的成员(下面的示例)。这个“prio”应该创建recyclerView如何显示项目的顺序->带有数字1的“prio”应该显示在rv的顶部,数字2在数字1的下方,依此类推。
附加信息:但是用户可以决定该项目应该具有哪个编号(prio)。所以“prio”不是固定的。
数据类
data class TaskModel(
val id: Int,
val task: String,
var prio: Int
)
Run Code Online (Sandbox Code Playgroud)
问题:你能帮我创建一个函数来对“prio”进行排序并在 recyclerView 中初始化这个函数作为 recyclerView 显示项目的顺序吗?
依恋:
适配器:
open class TaskAdapter (private val context: Context, private val list: ArrayList<TaskModel>)
: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val mTaskDetails : TaskModel? = null
private var onClickListener: OnClickListener? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return MyViewHolder(
LayoutInflater.from(context).inflate(R.layout.activity_item_adapter, parent, false)
)
}
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) …Run Code Online (Sandbox Code Playgroud) 我的类中有一些属性是延迟初始化的。我希望它们是不可变的,这就是为什么我不使用它们lateinit,并且我不希望它们可以为空,所以我认为懒惰是最好的选择。
在init我的类的块中,我想修改其中一个属性,但它给了我编译错误:Variable 'mLstQuestions' must be initialized。
我知道惰性属性在使用后立即初始化,那么为什么会发生这种情况呢?我怎样才能解决这个问题?什么是更好的方法?
如果我创建一个函数Initialize()并在该函数中修改它。完全没问题,我可以在 init 块中调用它。为什么呢?这工作正常吗?有什么不同?如果在块中禁止执行类似的操作init,那么函数调用是否也应该被禁止?
这是我的代码:
class CharacterListView(
inflater: LayoutInflater,
parent: ViewGroup
) {
init {
mLstQuestions.adapter = mQuestionsListAdapter
// error : Variable 'mLstQuestions' must be initialized
// error : Variable 'mQuestionsListAdapter' must be initialized
}
private val mLstQuestions by lazy { findViewById<RecyclerView>(R.id.char_list) }
private val mQuestionsListAdapter by lazy { QuestionsListAdapter(getContext(), this) }
private val mRootView by lazy { inflater.inflate(R.layout.activity_main, parent, false) }
...
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试从中恢复文本,EditText但是当我Toast收到字符串时,我得到了一个空字符串。
这是代码:
view =inflater.inflate(R.layout.fragment_home, container, false);
EditText id=view.findViewById(R.id.busID);
busId=id.getText().toString();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
Toast.makeText(getContext(),busId,Toast.LENGTH_LONG).show();
}
});
Run Code Online (Sandbox Code Playgroud)
这是屏幕截图
请帮帮我。我不知道为什么它返回空字符串
在以下代码中,我创建了两个作业,然后取消了父作业。我希望子作业会被取消,但是,子作业不会被取消,它们仍然处于活动状态。为什么?
注意:我知道通过创建 Job() 对象,然后将作业对象提供给协程上下文,然后取消 Job() 对象,可以轻松解决此问题。我的问题是为什么下面的代码不起作用?如果我想取消父作业,是否必须使用显式父参数?
fun main() {
// CoroutineScope
val coroutineScope = CoroutineScope(Dispatchers.IO)
var child1 : Job? = null
var child2 : Job? = null
// Use
val currentJob = coroutineScope.launch {
child1 = coroutineScope.launch {
delay(500)
}
child2 = coroutineScope.launch {
delay(500)
}
}
Thread.sleep(300L)
currentJob.cancel()
println("Job 1 state: ${child1?.status()}")
println("Job 2 state: ${child2?.status()}")
println("Parent job is active: ${coroutineScope.isActive}")
println("Parent job is active: ${currentJob.isActive}")
Thread.sleep(2000L)
}
Run Code Online (Sandbox Code Playgroud)
输出 :
Job 1 state: Active
Job 2 state: Active …Run Code Online (Sandbox Code Playgroud)