【发布时间】:2019-02-25 19:59:34
【问题描述】:
我需要知道如何在“onCreate”方法之外将 ProgressBar(或任何其他类型的按钮)调用到一个类中。 我在 Java 中看到我可以调用 findViewById(),但是在 Kotlin 中它已被删除。 例如,我正在尝试这样的事情:
var myProgressBar = findViewById(R.id.myProgressBar) as ProgressBar
但它给了我查找视图方法的未解决参考。
提前感谢您的帮助
______________更新___________________
这是我的 DownloadManager 自定义类
class DownloadSoundController(context: Context): Activity() {
val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
.....
.....
Thread(Runnable{
while (starter) {
var query = DownloadManager.Query()
query.setFilterById(refid)
var c = downloadManager.query(query)
if (c.moveToFirst()) {
var totalSizeIndex = c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)
var downloadedIndex = c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)
val fileSize = c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES))
var totalSize = c.getInt(totalSizeIndex)
var downloaded = c.getInt(downloadedIndex)
var progress = 0.0
var raffronto: Long = -1
if (fileSize != raffronto) {
progress = downloaded * 100.0 / totalSize
//println("myTag - downloaded % :$progress, downloaded var: $downloaded")
myProgressBar.progress = progress.toInt()
if (progress == 100.0) {
starter = false
}
} else {
//println("myTag - downloaded = 100 progress: $progress, $downloaded")
myProgressBar.progress = progress.toInt()
if (progress == 100.0) {
starter = false
}
}
}
}
}).start()
这是我的清单:
<application
android:hardwareAccelerated="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="fullSensor"
tools:replace="screenOrientation" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
//ATTENTION
<activity android:name="com.example.myapplication.DownloadSoundController"/>
// here it returns ERROR, on default constructor
<receiver android:name=".DownloadBroadcastManager">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
</intent-filter>
</receiver>
</application>
_________UPDATE_2__________
我完善了代码,发现了几个对我来说听起来很“奇怪”的问题:
1) 要停止关于 myProgressBar.progress = value 的空点异常,我发现我必须初始化 myProgressBar.progress = 0
2) 使用 println() 我的线程将我的文件的下载量逐步准确地标记到日志中,但是如果我添加 myProgressBar.progress = progress.toInt() (进度变量与我标记的相同)进入线程中的 println()!)... 它开始异步,甚至在下载开始之前就开始了.. 导致几个错误和 多次 下载“
我真的不知道发生了什么
【问题讨论】:
-
我不认为 Kotlin 无权访问 findViewById。也许你做错了什么。
-
我又更新了……真的很“奇怪”
标签: java android kotlin android-button android-progressbar