本文的目的是介绍在Kotlin中实现的详细情况,特别关注/inherit/〜extend批注的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在Kotlin中实现的机会
本文的目的是介绍在Kotlin中实现的详细情况,特别关注/ inherit /〜extend批注的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在Kotlin中实现的机会,同时也不会遗漏关于Android Kotlin recyclerview with EditText、Android Kotlin RXKotlin Room - 错误 Kotlin.unit、android – FragmentManager在Kotlin中抛出IllegalArgumentException、android – Kotlin inheritnce – 没有为参数上下文传递值的知识。
本文目录一览:- 在Kotlin中实现(/ inherit /〜extend)批注
- Android Kotlin recyclerview with EditText
- Android Kotlin RXKotlin Room - 错误 Kotlin.unit
- android – FragmentManager在Kotlin中抛出IllegalArgumentException
- android – Kotlin inheritnce – 没有为参数上下文传递值
在Kotlin中实现(/ inherit /〜extend)批注
在Java中,我可以“实现”注释。
示例Java注释:
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface JavaClassAnno { String[] value();}
示例Java“实现”:
class MyAnnotationLiteral extends AnnotationLiteral<JavaClassAnno> implements JavaClassAnno { // <--- works in Java private String value; public MyAnnotationLiteral(String value) { this.value = value; } @Override public String[] value() { return new String[] { value }; }}
尝试将其移植到Kotlin无效,因为它说注释是最终的,因此不能被继承,即以下内容将不起作用:
class MyAnnotationLiteral(private val internalValue: String) : AnnotationLiteral<JavaClassAnno>(), JavaClassAnno { // <--- doesn''t work in Kotlin (annotation can not be inherited) override fun value(): Array<String> { return arrayOf(internalValue) }}
您如何以Kotlin方式“实现/扩展”注释?找不到Kotlin在Java方面有所不同的任何原因。欢迎提供任何有关如何解决该问题的提示,也欢迎任何告诉您原因的信息。
以下问题包含此星座的用例:动态激发CDI事件,其成员带有qualifier。基本上,您需要类似这样的内容来缩小应基于其成员触发的限定符。
请注意,这也将适用于Kotlin批注,并且似乎Kotlin批注似乎无法打开,因此也无法实现/扩展。
到目前为止,我发现的是@Inherited
一个问题:
- https://discuss.kotlinlang.org/t/inherited-annotations-and-other-reflections-enchancements/6209
- https://youtrack.jetbrains.com/issue/KT-22265
但是我没有找到为什么注释不能像Java中那样实现/继承的任何原因。
我现在也在这里问了这个问题:https : //discuss.kotlinlang.org/t/implement-
inherit-extend-annotation-in-
kotlin/8916
更新:最后,我发现了有关此设计决策的内容,即下一个问题(在我为此打开自己的问题时):注释继承。禁止或正确实施。似乎该决定是“禁止”该决定的,即使没有(可见的)评论,讨论或该决定的其他来源。
添加了以下问题:https :
//youtrack.jetbrains.com/issue/KT-25947
答案1
小编典典从Kotlin
1.3开始,不支持这种情况。要创建注释的自定义实例,现在必须使用Java。做出此设计决定的原因之一是,制作注释接口过于特定于JVM,并且无法很好地映射到其他平台。
Android Kotlin recyclerview with EditText
如何解决Android Kotlin recyclerview with EditText?
我有一个 recyclerview,其中每个视图都包含一个 TextView 和一个 EditText。我被卡住的部分是当我开始在任何行的 EditText 框中键入时,它会自动更新列表下方的另一行。我知道这是由于 recyclerview 的整个回收方面而发生的,并且相同的视图被重新用于更下方的行。我只是不知道如何正确实现这一点。
解决方法
class TodoAdapter(private val tasks : List<TodoItem>) : RecyclerView.Adapter<TodoAdapter.ViewHolder>() {
inner class ViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
var editText = view.findViewById<EditText>(R.id.edit_text)
init {
editText.addTextChangedListener(object : TextWatcher{
override fun afterTextChanged(s: Editable?) {
tasks[adapterPosition].task = s.toString()
}
override fun beforeTextChanged(s: CharSequence?,start: Int,count: Int,after: Int) {
}
override fun onTextChanged(s: CharSequence?,before: Int,count: Int) {
}
})
}
}
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.todo_item,parent,false)
return ViewHolder(view)
}
override fun getItemCount() = tasks.size
override fun onBindViewHolder(holder: ViewHolder,position: Int) {
val item = tasks[position]
holder.editText.setText(item.task)
}
}
class TodoItem(var task: String = "")
editText.addTextChangedListener(object TextWatcher() {
override fun afterTextChanged(s : Editable) {
item.textFieldValue = s.toString()
}
});
将 textChangeListener 放在 init 块中,这应该可以工作
,@MuhammadAhmed
数据类
from P4 import P4
class LLL:
p4 = P4()
p4.host = "192.168.1.22:1666"
p4.user = "asdsds"
p4.client = "asddsdd"
p4.password = "asdsddsd"
p4.connect()
p4.run_login()
适配器
class todolist(var hours: String,var task: String)
Android Kotlin RXKotlin Room - 错误 Kotlin.unit
如何解决Android Kotlin RXKotlin Room - 错误 Kotlin.unit?
我想通过循环数组向房间数据库做一个简单的插入数据。 我使用 RXKotlin 来迭代数组 我有一个这样的数组:
fun defaultDataCategory() : ArrayList<CategoryModel>{
var cat: CategoryModel
var catArrayList: ArrayList<CategoryModel> = ArrayList(0)
val date: Int = Calendar.DATE
val formatedDate = SimpleDateFormat("yyyy-MM-dd").format(Date())
val formatedTime = SimpleDateFormat("HH:mm").format(Date())
val DateTime = "$formatedDate $formatedTime"
catArrayList.add(
CategoryModel(
1,"Personal",true,"Red",Converter.toDate(Calendar.getInstance().timeInMillis),"system","system"
)
)
catArrayList.add(
CategoryModel(
2,"Work","Blue","system"
)
)
catArrayList.add(
CategoryModel(
3,"Home","Purple","system"
)
)
catArrayList.add(
CategoryModel(
4,"Learn","Yellow","system"
)
)
return catArrayList
}
我像这样用 RXKotlin 循环了一个数组
var catArrayList: ArrayList<CategoryModel> = DefaultData.defaultDataCategory()
catArrayList.toObservable()
.subscribeBy( // named arguments for lambda Subscribers
onNext = { homeviewmodel.insertCategory(it) },onError = { Log.e("error insert=",it.printstacktrace().toString()) },onComplete = { Log.e("complete insert=","complete insert") }
)
我得到了一个错误“kotlin.unit”。
Error RXKotlin
如何使用 RXKotlin 迭代数组并插入房间数据库?
解决方法
试试
Observable.fromIterable(catArrayList).subscribeBy {...}
android – FragmentManager在Kotlin中抛出IllegalArgumentException
override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) val fm = childFragmentManager var prefsFragment: PrefsFragment? = fm.findFragmentByTag(tableName) as PrefsFragment? if (prefsFragment == null) { prefsFragment = PrefsFragment() val ft = fm.beginTransaction() ft.add(R.id.parameters_fragment_container,prefsFragment,tableName) ft.commit() fm.executePendingTransactions() } }
我不得不说这是Java-> Kotlin自动翻译器对我以前的Java代码所做的事情(除了我在标签上找到PrefsFragment的行末尾的?),所以它可能不完全是犹太教.我正在学习Kotlin.
现在,当我调用executePendingTransactions()时,我的应用程序崩溃抛出java.lang.IllegalArgumentException,并显示错误消息“参数指定为非null为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数savedInstanceState”.现在,是的,savedInstanceState实际上是null,但它与显然抛出异常的调用有什么关系呢?我确保没有其他值/变量为空,所以我相信错误信息……但为什么呢?
编辑这是堆栈跟踪,以及让我做恶梦的源代码
https://gist.github.com/Morpheu5/8ec7e2064f53679405769b43c64f2cb7
E/AndroidRuntime: FATAL EXCEPTION: main Process: net.morpheu5.bleedingscorecalculator,PID: 2685 java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,parameter savedInstanceState at net.morpheu5.bleedingscorecalculator.CalculatorScreen$PrefsFragment.onCreatePreferences(CalculatorScreen.kt:0) at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:223) at android.support.v4.app.Fragment.performCreate(Fragment.java:2075) at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1060) at android.support.v4.app.BackStackRecord.setLastIn(BackStackRecord.java:838) at android.support.v4.app.BackStackRecord.calculateFragments(BackStackRecord.java:861) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:719) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:594) at net.morpheu5.bleedingscorecalculator.CalculatorScreen.onActivityCreated(CalculatorScreen.kt:34) at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2096) at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1138) at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1295) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1643) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at android.support.v4.view.ViewPager.populate(ViewPager.java:1272) at android.support.v4.view.ViewPager.populate(ViewPager.java:1120) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1646) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:703) at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1367) at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:768) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:689) at android.view.View.measure(View.java:19857) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2275) E/AndroidRuntime: at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1366) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1619) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) at android.view.Choreographer.doCallbacks(Choreographer.java:686) at android.view.Choreographer.doFrame(Choreographer.java:621) at android.view.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:860) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
解决方法
覆盖fun onCreatePreferences(savedInstanceState:Bundle,rootKey:String)
并且它应该是以下允许savedInstanceState为null –
覆盖fun onCreatePreferences(savedInstanceState:Bundle?,rootKey:String)
android – Kotlin inheritnce – 没有为参数上下文传递值
没有为参数上下文传递值
我不完全确定它意味着什么,也找不到任何解决方法.
这是相关代码:
import android.accounts.AbstractAccountAuthenticator import android.accounts.Account import android.accounts.AccountAuthenticatorResponse import android.os.Bundle class AccountAuthenticator: AbstractAccountAuthenticator() {}
有谁知道这意味着什么,为什么,以及如何解决它?
解决方法
class AccountAuthenticator(context: Context): AbstractAccountAuthenticator(context) {}
我们今天的关于在Kotlin中实现和/ inherit /〜extend批注的分享就到这里,谢谢您的阅读,如果想了解更多关于Android Kotlin recyclerview with EditText、Android Kotlin RXKotlin Room - 错误 Kotlin.unit、android – FragmentManager在Kotlin中抛出IllegalArgumentException、android – Kotlin inheritnce – 没有为参数上下文传递值的相关信息,可以在本站进行搜索。
本文标签: