如何使用Kotlin Android扩展程序Fragment?如果我在里面使用它们onCreateView(),我得到这个NullPointerException例外:
引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.view.View android.view.View.findViewById(int)'
这是片段代码:
package com.obaied.testrun.Fragment
import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.obaied.acaan.R
import kotlinx.android.synthetic.main.fragment_card_selector.*
public class CardSelectorFragment : Fragment() {
val TAG = javaClass.canonicalName
companion object {
fun newInstance(): CardSelectorFragment {
return CardSelectorFragment()
}
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
var rootView = inflater?.inflate(R.layout.fragment_card_selector, container, false)
btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }
return rootView
}
}
`
Run Code Online (Sandbox Code Playgroud) 下载并安装了最新的Kotlin插件后,我从Android Studio发出了Outdated Kotlin Runtime警告,告诉我:
您在'kotlin-stdlib-1.1.2'库中的Kotlin运行时版本是1.1.2,而插件版本是1.1.2-release-Studio2.3-3.应更新运行时库以避免兼容性问题.
我尝试单击" 更新运行时"按钮,但收到另一条消息:
目前不支持Gradle项目的自动库版本更新.请手动更新build.gradle.
如何解决这个问题?
我正在尝试重建我的Android Studio Gradle项目(主要包含Kotlin代码),但它UnableToDeleteFileException在清理/重建过程中开始抛出:
Execution failed for task ':app:clean'.
> Unable to delete file: C:\Users\User\KotlinGameEngine\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.0.1\jars\classes.jar
Run Code Online (Sandbox Code Playgroud)
在我尝试更改项目的包结构后,这种情况开始发生.不幸的是,我是通过重命名和移动源文件夹而不是通过Android Studio重构来实现的,这是一个坏主意.
我一整天都在寻找解决这个问题的方法,这些都是我试过无用的东西:
gradle和.gradle目录;.gradle我的用户目录中的目录;gradlew clean从AS终端运行;我尝试了一些有点成功的事情,但只让我再次执行一次干净并重新构建错误之前:
java.exe在AS运行时杀死进程(这在技术上可以每次都完成,但是它很繁琐并且减慢了构建过程)所以似乎编译Java进程可能由于某种原因锁定构建文件,但它也可能与Kotlin有关.我有一个(更成熟的)Java Android项目,我正在努力,虽然我在清理时无法重现此错误.这似乎只发生在我的Kotlin项目上.
有任何想法吗?
提前致谢.
我发现问题是由Kotlin Android插件引起的.当我apply plugin: 'kotlin-android'从模块的build.gradle文件中删除时,问题消失,并在重新插入时返回.随意提供任何洞察力.
最后一次更新不是原因.我发现如果一个项目包含一个Kotlin文件,那么重建和清理就会失败.它继续失败,即使所有Kotlin文件都被删除,直到后台Java进程被杀死,这意味着它对构建文件有某种锁定.我在这里提交了一个错误,其中包含更多细节和重现错误的步骤:KT-9440
android kotlin android-studio android-gradle-plugin kotlin-android-extensions
我试图在Android Studio中试用Kotlin和Kotlin Android扩展程序.我已经在Ubuntu 14.04上的Android Studio v 1.5.1和OS X El Capitan上的Android Studio v 1.5.1中尝试了这一点,结果相同.
这是我在做的事情:
然后我进入生成的content_main.xml文件并为"Hello World!"添加一个id(hello).TextView中.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.gmail.npnster.mykotlinfirstproject.MainActivity"
tools:showIn="@layout/activity_main">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/hello"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
然后在转换后的MainActivity中添加一行来设置TextView.(如下所示).Android Studio然后提示我(通过alt-enter)插入此行(也显示如下)
import kotlinx.android.synthetic.main.content_main.*
Run Code Online (Sandbox Code Playgroud)
所以在这一点一切似乎罚款
但是当我尝试编译这个时,我得到了
Unresolved reference: kotlinx
Unresolved reference: kotlinx
Unresolved reference: hello
Run Code Online (Sandbox Code Playgroud)
注意,我并没有安装科特林的Android扩展插件.截至几天前,现在应该将其包含在主插件中并标记为已过时.(事实上,如果您在使用最新插件时尝试安装它,则不会安装任何新内容)
有谁看到我做错了什么?
主要活动
import android.os.Bundle
import android.support.design.widget.FloatingActionButton
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import android.view.View
import …Run Code Online (Sandbox Code Playgroud) 作为一名Java开发人员,支持领域的概念对我来说有点陌生.鉴于:
class Sample {
var counter = 0 // the initializer value is written directly to the backing field
set(value) {
if (value >= 0) field = value
}
}
Run Code Online (Sandbox Code Playgroud)
这个支持领域有什么用?Kotlin博士说:Kotlin的课程不能有字段.但是,有时在使用自定义访问器时需要有一个支持字段.为什么?在setter中使用属性名称本身的区别是什么.
class Sample {
var counter = 0
set(value) {
if (value >= 0) this.counter = value // or just counter = value?
}
}
Run Code Online (Sandbox Code Playgroud) 我是kotlin的新人.我发现并尝试findViewById在我的Activity类中使用合成方法而不是烦人的方法,但我发现"如果我们想在View上调用合成属性(在适配器类中有用),我们还应该导入kotlinx.android.synthetic.main .视图.*." 但我无法弄清楚它究竟是如何起作用的?有什么例子吗?
如何ArrayList在Kotlin中添加项目?
我是Kotlin的新手.我想知道这两者之间的区别!!,并?在下面的代码.
我有两个片段首先使用!!mCurrentDataset而另一个?用于同一个变量.
if(!mCurrentDataset!!.load(mDataSetString.get(mCurrentDataSelectionIndex), STORAGE_TYPE.STORAGE_APPRESOURCE))
{
Log.d("MyActivity","Failed to load data.")
return false
}
Run Code Online (Sandbox Code Playgroud)
if(!mCurrentDataset?.load(mDataSetString.get(mCurrentDataSelectionIndex), STORAGE_TYPE.STORAGE_APPRESOURCE)!!)
{
Log.d("MyActivity","Failed to load data.")
return false
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我创建了一个kotlin Activity,但是我无法扩展活动,我收到的消息是" 这种类型是最终的,所以它不能继承 ".如何从最终删除kotlin活动,因此可以扩展.
我在Kotlin中遇到了这个错误:
class GitHubRepoAdapter(private val context: Context,
private val values: List<GithubRepo>) : ArrayAdapter<GithubRepo>(context, R.layout.list_item,
values) {
Run Code Online (Sandbox Code Playgroud)
私有val上下文:上下文
在日志中它说:
错误:(14,25)意外覆盖:以下声明具有相同的JVM签名(getContext()Landroid/content/Context;):fun():Context fun getContext():Context!
我无法看到导致问题的原因.