android - 将 OnClick 侦听器从超级片段分配给新活动
问题描述
我正在尝试在新类中分配 ImageView 的 OnClick 侦听器。
问题:问题是片段类不是open
不能被继承的。我正在添加一个位于fragment_home.xml
. 我只能继承超级活动,所以我想知道是否可以从新活动中分配监听器?我尝试了以下方法,但它只是使应用程序崩溃...
NewActivity.kt
class MainActivity : SuperMainActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val abcImageView = findViewById<ImageView>(R.id.abc)
abcImageView?.setOnClickListener { Todo() }
}
}
...
fragment_home.xml
...
<ImageView
android:id="@+id/abc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="@string/abc"
android:scaleType="matrix"
android:src="@drawable/abc" />
...
提前致谢!
编辑:当我点击 ImageView 时,它会显示这样的run
日志......
I/ViewRootImpl@91838a8[MainActivity]: ViewPostIme pointer 0
I/ViewRootImpl@91838a8[MainActivity]: ViewPostIme pointer 1
解决方案
我不确定我们是否可以直接传递一个函数,但传递一个对象是可能的。所以onClickListener
在一个类中包装并实现Parcelable
必须做到这一点
尝试以下
@Parcelize
class TransposableClickListener(val clickListener : () -> Unit) : Parcelable{
fun onClick() = clickListener()
}
现在你可以尝试类似的东西,
//base activity class
val intent = Intent(context, NextActivity::class.java);
var bundle = Bundle()
val transposableClickListener = TransposableClickListener(::ToDo)
bundle.putParcelable("clickListener",transposableClickListener)
intent.putExtra("myBundle",bundle)
startActivity(intent);
//destination activity class
val bundle = intent.getBundleExtra("myBundle")
var clickListener = bundle.getParcelable<TransposableClickListener>("clickListener") as TransposableClickListener
//usage will be
textview.setOnClickListener{
clickListener.onClick()
}
推荐阅读
- amazon-web-services - CloudFormation UPDATE_ROLLBACK_COMPLETE(红色)- 无法检测到漂移...我有什么选择?
- huawei-mobile-services - 华为 AppGallery:应用发布日期不匹配且应用状态未显示任何内容
- python - 我正在尝试在字符串中包含撇号,以便可以将其作为文本文件中的标点符号忽略
- reactjs - Reactjs 表可扩展行
- c++ - 我如何同时 std::cout 和 std::cin ?
- macos - macOS 应用程序有没有办法在 URL 导航上硬编码 HTTP 引用?
- javascript - (空白)不是函数(React.js)
- c# - 如何在 Blazor WebAssemly 应用程序中引用 IHttpClientFactory?
- google-cloud-platform - 虚拟机实例消失
- angular - 角度拖放中数组的最大长度