Почему вызвано: java.lang.IllegalStateException: surface_view не должно быть нулевым? - PullRequest
0 голосов
/ 08 марта 2019

Я пробую эту библиотеку qeReader в моем приложении.У меня есть активность, где я встраиваю SurfaceFragment.Вот макет frag_surface :

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <SurfaceView
            android:id="@+id/surface_view"
            android:layout_width="300dp"
            android:layout_height="300dp"/>
</LinearLayout>

и мой SurfaceFragment:

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_surface, container, false)
}

, и в своей деятельности я звоню:

val fragmentManager = this.supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.framelayout_qr, SurfaceFragment())
fragmentTransaction.commit()

ив макете моей деятельности:

<FrameLayout
        android:id="@+id/framelayout_qr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
/>

Позже мне нужно получить доступ из своей деятельности к Surface_view, но это дает сбой:

Причина: java.lang.IllegalStateException: surface_view mustnot be null

Q1: Все мои R помечены красным и помечены как Неразрешенная ссылка: R , хотя они импортированы в коде.Но я могу запустить приложение, пока не произойдет сбой.Почему он помечен красным, но явно импортирован?

Q2: Я читал, что мне больше не нужны эти функции findViewById () в Kotlin?Почему surface_view является нулевым из действия, хотя оно заменено в FragmentTransaction?

1 Ответ

1 голос
/ 08 марта 2019

Q1: R - это ссылка на набор ресурсов, которые генерируются при «сборке» приложения. В первый раз его не будет, а потом будет. Это сбрасывается каждый раз, когда вы «чистите» приложение. Нажатие «перестроить» запускает сначала чистую, а затем сборку. Несмотря на то, что именно так устроена система ресурсов Android, проверка Android Studio недостаточно умна, чтобы знать об этом с первого раза, поэтому она ошибочно полагает, что вы получите ошибку во время компиляции. Если это не помогло, попробуйте отключить кеши в Android Studio, выполнить синхронизацию, а затем пересобрать проект.

Q2: Плагин Kotlin Android Extensions - это функция, появившаяся в последние пару лет, которая позволяет не использовать findViewById(...) для доступа к представлениям и виджетам. Вы можете получить доступ только к представлениям и виджетам, которые объявлены в XML-файле, из файла Kotlin, который вы используете setContentView(layout_xml_file) in.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...