Неразрешенная ссылка: setOnClickListener на Selector при использовании LiveData для передачи значения из одного фрагмента в другой фрагмент - PullRequest
0 голосов
/ 23 марта 2020

Я новичок в Android Разработка. Итак, теперь я создал вкладку деятельности. Я хотел передать данные из FragmentOne во FragmentTwo с помощью LiveData и следовал инструкциям здесь: https://android.jlelse.eu/communicate-between-fragments-and-activity-using-livedata-631526d6357a.

К сожалению, setOnClickListener показывал Неразрешенная ссылка : setOnClickListener .

FragmentOne:

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.core.view.forEach
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import com.demicode.ccdofieldkit.ui.main.PageViewModel
import kotlinx.android.synthetic.main.fragment_one.*
import java.nio.channels.Selector
import kotlin.properties.Delegates

class FragmentOne: Fragment(), View.OnClickListener {

    private lateinit var itemSelector: Selector
    private lateinit var  model: PageViewModel
    private var average by Delegates.notNull<Double>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        model = activity?.run {
            ViewModelProviders.of(this).get(PageViewModel::class.java)
        } ?: throw  Exception ("Invalid activity")

        // setOnClickListener throws a Unresolved reference: setOnClickListener error
        itemSelector.setOnClickListener {
            model.myAverage.value = average.toString()
        }
    }
}

FragmentTwo

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.demicode.ccdofieldkit.ui.main.PageViewModel
import kotlinx.android.synthetic.main.fragment_two.*
import java.lang.Exception


class FragmentTwo : Fragment(), View.OnClickListener {

    private lateinit var model: PageViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        model = activity?.run {
            ViewModelProviders.of(this).get(PageViewModel::class.java)
        } ?: throw Exception("Invalid Activity")
        model.average.observe(this, Observer {
            myAverageEditText.text
        })
    }
}

PageViewModel:

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations
import androidx.lifecycle.ViewModel

class PageViewModel : ViewModel() {

    private val _index = MutableLiveData<Int>()
    val text: LiveData<String> = Transformations.map(_index) {
        "Hello world from section: $it"
    }

    val myAverage= MutableLiveData<String>()
    fun myAverage (item: String) {
        myAverage.value = item
    }

Ошибка:

Unresolved reference: setOnClickListener

Если удалить:

import java.nio.channels.Selector

Появляется другая ошибка:

Unresolved reference: Selector
...