Я пытаюсь реализовать простую рейтинговую строку (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"
. При нажатии на кнопку текст не отображается и приложение вылетает.
Любое понимание этого вопроса будет с благодарностью.
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()
}
Вот мое решение.
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
}
Убедитесь, что вы tools:context="<file path to your fragment>"
определены в корневом макете вашего XML-фрагмента, например: tools:context=".ui.registration.RegistrationFragment"
.
tools: context используется для поиска правильного места для вставки вашего обработчика onClick .
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .