Я пытаюсь реализовать простую рейтинговую строку (rb) в Android Studio, используя Kotlin. Чтобы проверить рейтинговую строку (X звездочек из 5), я использую функцию Toast для отображения назначенного значения рейтинга после нажатия кнопки «Применить» (button). В настоящее время я работаю над фрагментом, который, я считаю, является источником моей проблемы. Весь этот код находится в разделе override fun onCreateView(...)): View? { фрагмента.

    btn = root.findViewById<View>(R.id.button) as Button
    rb = root.findViewById<View>(R.id.rb) as RatingBar

    fun click(view: View) {
        val ratingvalue = rb.rating
        Toast.makeText(context!!, "Rating is: " + ratingvalue, Toast.LENGTH_LONG).show()
    }

Имя функции click отображается серым цветом, что означает, что она никогда не вызывается. Чтобы уточнить, я обозначил это как имя функции кнопки onClick, например: android:onClick="click". При нажатии на кнопку текст не отображается и приложение вылетает.

Любое понимание этого вопроса будет с благодарностью.

0
christopherhlee 19 Дек 2019 в 06:16

3 ответа

Установите событие нажатия на кнопку программно:

btn = root.findViewById<View>(R.id.button) as Button
btn.setOnClickListener {
    val ratingvalue = rb.rating
    Toast.makeText(context!!, "Rating is: " + ratingvalue, Toast.LENGTH_LONG).show()
}
0
Duy Khanh Nguyen 19 Дек 2019 в 03:40

Вот мое решение.

1.Удалите android:onClick="click" из Button в вашем файле макета фрагмента, например

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RatingBar
        android:id="@+id/rb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

2.В своем классе фрагмента удалите метод click() и добавьте это

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val root = inflater.inflate(R.layout.fragment_main, container, false)

    btn = root.findViewById<View>(R.id.button) as Button
    rb = root.findViewById<View>(R.id.rb) as RatingBar
    btn.setOnClickListener {
        val ratingvalue = rb.rating
        Toast.makeText(context!!, "Rating is: " + ratingvalue, Toast.LENGTH_LONG).show()
    }

    return root
}
1
Nhất Giang 19 Дек 2019 в 07:14

Убедитесь, что вы tools:context="<file path to your fragment>" определены в корневом макете вашего XML-фрагмента, например: tools:context=".ui.registration.RegistrationFragment".

tools: context используется для поиска правильного места для вставки вашего обработчика onClick .

0
Christilyn 19 Дек 2019 в 03:44