web-dev-qa-db-ja.com

java.lang.IllegalStateException:TextViewをnullにすることはできません(Android / Kotlin)

私のリサイクルビューには、次のViewHolderクラスがあります。

inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        private val dateText = itemView.itemDateSummaryList
        private val systolicVal = itemView.systolicValue
        private val diastolicVal = itemView.diastolicValue

        fun update(listItem: SummaryListItemModel) {
            Log.i(TAG, "Update method called " + listItem.date)
            dateText.text = listItem.date
            systolicVal.text = listItem.sysVal.toInt().toString()
            diastolicVal.text = listItem.diasVal.toInt().toString()
        }

    }

しかし、アプリを実行すると、dateText.text = listItem.date言って、

Java.lang.IllegalStateException: dateText must not be null
at *****.******.*****.ui.detailview.bloodpressure.SummaryListAdapter$ItemViewHolder.update(SummaryListAdapter.kt:68)

しかし listItem.dateはnullではありませんログで確認しました。

12
kokilayaa

エラーはlistItem.dateに関するものではありません。エラーは、テキストを設定しようとしているdateText textviewがnullであると言います。

正しいtextviewを使用していることを再確認してください

可能性:
1)idの間違ったtextviewを使用している可能性があります
2)ビューの拡大中に間違ったファイルを使用した可能性があります。

ctrl + itemDateSummaryListをクリックして、textviewinfateのレイアウトファイルと同じかどうかを確認します

7
Irony Stack

フラグメントを使用している場合: 1.レイアウト参照を保持するグローバル変数を使用します

private var root: View? = null   // create a global variable which will hold your layout 
 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            root = inflater.inflate(R.layout.your_layout_file_name, container, false)  // initialize it here
            return root
    }

2.レイアウト内にあるレイアウトのビューを使用するには、(root.)のような:

root!!.textView.text="Hello"
5
Suraj Vaishnav

dateTextビュー自体は値listItem.dateではなくnullであると言っています。正しく表示しているかどうかを確認してください。itemviewには、アクセスしようとしているIDを持つTextView

4
rajan ks

私はこのエラーをフラグメントで受け取り、このエラーを解決しました。

エラーのコード:

class MyFragment : Fragment(){

    private var item: Item? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        item = arguments?.getParcelable(BUNLDE_ITEM)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        item?.let {
            textViewTitle.text = "Text"
        }
        return inflater.inflate(R.layout.my_fragment, null, false)
    }

    companion object {
        private const val BUNLDE_ITEM = "item"
        fun newInstance(item: Item) = MyFragment().apply {
            arguments = Bundle().apply {
                putParcelable(BUNLDE_ITEM, item)
            }
        }
    }
}

作業コード:

class MyFragment : Fragment() {

    private var item: Item? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        item = arguments?.getParcelable(BUNLDE_ITEM)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val root: View = inflater.inflate(R.layout.my_fragment, container, false)
        val textViewTitle = root.findViewById<View>(R.id.textViewTitle) as TextView

        item?.let {
            textViewTitle.text = "text"
        }
        return root
    }

    companion object {
        private const val BUNLDE_ITEM = "item"
        fun newInstance(item: Item) = MyFragment().apply {
            arguments = Bundle().apply {
                putParcelable(BUNLDE_ITEM, item)
            }
        }
    }
}
1

私はちょうど私のRecyclerViewで同じ問題を抱えていました。それは何ヶ月も働いていました。多数の失敗したトラブルシューティング手順の後、Build> Clean Projectを実行し、問題を修正しました。

0
Rich Gabrielli

また、xmlファイルの間違ったコンテキスト参照で発生する可能性があります。通常、手動でActivityを別のパッケージに移動すると表示されます。Android studioはこの変更を自動的に行いませんでした

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:tools="http://schemas.Android.com/tools"
        ....
        tools:context=".view.ui.login.LoginActivity">
....
</androidx.constraintlayout.widget.ConstraintLayout>
0
Vitaliy A

Fragmentを使用しているときにも同じことが起こりました。コードをonCreateViewから取得し、onViewCreatedメソッドに配置すると、問題が解決しました。

0
SinaMN75