Android library androidx.appcompat:appcompat:1.0.2。を使用しています。codelabsワークマネージャのサンプルで作業しています。ViewModelからライブデータを取得する必要があり、これを使用しています。
mViewModel!!.getOutputWorkInfo()?.observe(this, Observer<List<WorkInfo>> {
})
しかしthis変数はエラーを示します-タイプが一致しません。必須:ライフサイクルオーナー。検出:BlurActivity
デフォルトでappcompactアクティビティはライフサイクル所有者を実装するので、ライフサイクル所有者を拡張する必要はないと言っています。
そして、私は別のプロジェクトでもこれを行いましたが、問題は見つかりませんでした。このプロジェクトでこのエラーが発生する理由がわかりません。
`
import Android.os.Bundle
import Android.view.View
import Android.widget.Button
import Android.widget.ImageView
import Android.widget.ProgressBar
import Android.widget.RadioGroup
import com.bumptech.glide.Glide
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.work.WorkInfo
class BlurActivity : AppCompatActivity() {
private var mViewModel: BlurViewModel? = null
private var mImageView: ImageView? = null
private var mProgressBar: ProgressBar? = null
private var mGoButton: Button? = null
private var mOutputButton: Button? = null
private var mCancelButton: Button? = null
/**
* Get the blur level from the radio button as an integer
* @return Integer representing the amount of times to blur the image
*/
private val blurLevel: Int
get() {
val radioGroup = findViewById<RadioGroup>(R.id.radio_blur_group)
return when (radioGroup.checkedRadioButtonId) {
R.id.radio_blur_lv_1 -> 1
R.id.radio_blur_lv_2 -> 2
R.id.radio_blur_lv_3 -> 3
else -> 1
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_blur)
// Get the ViewModel
mViewModel = ViewModelProviders.of(this).get(BlurViewModel::class.Java)
// Get all of the Views
mImageView = findViewById(R.id.image_view)
mProgressBar = findViewById(R.id.progress_bar)
mGoButton = findViewById(R.id.go_button)
mOutputButton = findViewById(R.id.see_file_button)
mCancelButton = findViewById(R.id.cancel_button)
// Image uri should be stored in the ViewModel; put it there then display
val intent = intent
val imageUriExtra = intent.getStringExtra(Constants.KEY_IMAGE_URI)
mViewModel!!.setImageUri(imageUriExtra)
if (mViewModel!!.imageUri != null) {
Glide.with(this).load(mViewModel!!.imageUri).into(mImageView!!)
}
mViewModel!!.getOutputWorkInfo()?.observe(this, Observer<List<WorkInfo>> {
// If there are no matching work info, do nothing
if (it == null || it.isEmpty()) return@Observer
// We only care about the first output status.
// Every continuation has only one worker tagged TAG_OUTPUT
val workInfo = it[0]
val finished = workInfo.state.isFinished
if (!finished) showWorkInProgress() else showWorkFinished()
})
// Setup blur image file button
mGoButton!!.setOnClickListener { view -> mViewModel!!.applyBlur(blurLevel) }
}
/**
* Shows and hides views for when the Activity is processing an image
*/
private fun showWorkInProgress() {
mProgressBar!!.visibility = View.VISIBLE
mCancelButton!!.visibility = View.VISIBLE
mGoButton!!.visibility = View.GONE
mOutputButton!!.visibility = View.GONE
}
/**
* Shows and hides views for when the Activity is done processing an image
*/
private fun showWorkFinished() {
mProgressBar!!.visibility = View.GONE
mCancelButton!!.visibility = View.GONE
mGoButton!!.visibility = View.VISIBLE
}
}
`
この問題は、appcompat
依存関係とLifecycle
依存関係の間に不一致がある場合に発生します。
次の一連の依存関係を使用します。
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version
implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
または:
implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation "Android.Arch.lifecycle:extensions:$lifecycle_version"