android - 尝试在空对象引用上调用虚拟方法“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)
}
}
}
解决方案
imgClick
是null
。不看定义和初始化代码就无法判断为什么,但是如果是普通变量,则需要在创建视图后对其进行初始化。我的猜测是,如果您通过 初始化它findViewById
,那么您之前正在这样做onCreateView
,此时尚未创建视图,因此它返回null
。
推荐阅读
- python - Python 3.6:在 Windows 上安装 tensorflow 失败并出现 TypeError:stat:路径应该是字符串、字节、os.PathLike 或整数,而不是 NoneType
- node.js - 如何在服务器崩溃后重新运行应用程序?
- angular - 在 Angular 中编辑数据
- html - 使用cheerio获取html中文本之前使用的标签
- vue.js - nuxt router.js 在 vuejs 应用程序中运行 npm run dev 后重写
- python-3.x - 尝试训练逻辑回归模型时出现内存故障
- android - 试图从给出列名的 SQLite 表中获取原始 id
- sql - SQL 如何将 csv 文件复制到有此分隔符问题的表中?
- c# - 试图从
- angular - Andersstand 如何初始化 keycloak-angular 服务?(bearerExcludedUrls 等...)