首页 > 解决方案 > 尝试在空对象引用上调用虚拟方法“void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)”

问题描述

我想单击图像并获取 textview 文本,但出现此错误尝试在空对象引用上调用虚拟方法 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)'

XML

          <ImageView
            android:id="@+id/imgClick"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:srcCompat="@mipmap/ic_launcher"
            />
        <TextView
            android:id="@+id/Message"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:text="text yeah"
            android:visibility="invisible"/>

在这里,我想访问上述 XML 项目!

分段

 class HomeFragment : Fragment() {

 var newList: MutableList<News> = mutableListOf()

 companion object {
     fun newInstance() =HomeFragment()
}

private lateinit var viewModel: HomeViewModel

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

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)


    recyclerView.setHasFixedSize(true)
    recyclerView.layoutManager = LinearLayoutManager(this.context)


    // TODO: Use the ViewModel

    val lastNewsObserver = Observer<List<News>>
    {
        // Access the RecyclerView Adapter and load the data into it
            newList -> recyclerView.adapter = NewsAdapter(newList,this.context!!)

    }

    viewModel.getNews().observe(this, lastNewsObserver)

    val img: ImageView = imageView.findViewById(R.id.imgClick)
    val msg: TextView = textView.findViewById(R.id.Message)
    img.setOnClickListener{
        val intent = Intent()
        intent.action = Intent.ACTION_SEND
        intent.putExtra(Intent.EXTRA_TEXT, msg.text)
        intent.type = "text/plain"

        startActivity(intent)
    }
}

 }

标签: androidandroid-fragmentskotlin

解决方案


imgClicknull。不看定义和初始化代码就无法判断为什么,但是如果是普通变量,则需要在创建视图后对其进行初始化。我的猜测是,如果您通过 初始化它findViewById,那么您之前正在这样做onCreateView,此时尚未创建视图,因此它返回null


推荐阅读