Android просматривает идентификатор с Kotlin - PullRequest
0 голосов
/ 29 апреля 2018

Я работаю над проектом, который использует навигационный ящик.

<android.support.design.widget.NavigationView
        ...
        app:headerLayout="@layout/home_nav_header" />

макет заголовка содержит TextView и ImageView, которые будут содержать имя пользователя и рис пользователя. файл home_nav_header выглядит так:

<LinearLayout ...>

    <ImageView
        android:id="@+id/nav_drawer_user_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        app:srcCompat="@mipmap/ic_launcher_round" />

    <TextView
        android:id="@+id/nav_drawer_user_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

</LinearLayout>

В HomeActivity я задаю данные следующим образом:

import kotlinx.android.synthetic.main.home_content.*
import kotlinx.android.synthetic.main.home_nav_header.*
/...
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_home)
        mPresenter = HomePresenter(this)

        //Fill user name
        mUser = intent.getParcelableExtra(LoginActivity.INTENT_USER)
        val userName: String = mUser.firstName + " " + mUser.lastName
        nav_drawer_user_name.text = userName

        //Fill user image
        val decodedString = Base64.decode(mUser.photoUrl, Base64.DEFAULT)
        val decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.size)
        val userImageDrawable = BitmapDrawable(getResources(), decodedByte)
        nav_drawer_user_name.background = userImageDrawable
    }

Я проверил, что userName и userImageDrawable не равны нулю.

Проблема в том, что когда я пытаюсь заполнить данные в TextView и ImageView, приложение вылетает со следующей ошибкой:

java.lang.IllegalStateException: findViewById (R.id.nav_drawer_user_name) не должен быть нулевым

Чего мне не хватает в моем коде?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я думаю, что есть проблема с плагином kotlin android, я попробовал эту же ошибку в onCreate, onStart и onResume, но если я установил текст onClick чего-либо, он будет работать правильно. если вы все еще хотите установить setText (или любой другой метод этого представления), вы делаете это традиционным способом

    val textView  = nav_view.getHeaderView(0).findViewById<TextView>(R.id.nav_drawer_user_name)
    textView.text= "new Text"
0 голосов
/ 29 апреля 2018

Вы должны сначала получить представление, прежде чем сможете присвоить ему значение.

   import kotlinx.android.synthetic.main.home_content.*
   import kotlinx.android.synthetic.main.home_nav_header.*

    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_home)
            mPresenter = HomePresenter(this)

            //Fill user name
            mUser = intent.getParcelableExtra(LoginActivity.INTENT_USER)
            val userName: String = mUser.firstName + " " + mUser.lastName
            val nav_drawer_user_name = findViewById<TextView>(R.id.nav_drawer_user_name)
            nav_drawer_user_name.text = userName

            //Fill user image
            val decodedString = Base64.decode(mUser.photoUrl, Base64.DEFAULT)
            val decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.size)
            val userImageDrawable = BitmapDrawable(getResources(), decodedByte)
            nav_drawer_user_name.background = userImageDrawable
        }

Обратите внимание на val nav_drawer_user_name = findViewById<TextView(R.id.nav_drawer_user_name)

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