【发布时间】:2017-11-19 14:28:31
【问题描述】:
我有一个 Main Activity,它有一堆子视图,然后我有一个 ListView,它的项目是动态生成的。我希望能够长按这些项目中的任何一个,并在 Main Activity 中处理此事件。
MainActivity
LinearLayout
ListView
Item - (long click here)
现在我知道如何订阅动态创建的 ListView 项目本身的 onLongClick 事件,但那是在我用来创建项目的适配器中。
我希望的是,我可以简单地订阅 Main Activity 的 onLongClick 事件,然后我会看到动态创建的 ListView 项中的事件传播到 MainActivity。但这并没有发生。
我的 MainActivity 实现了View.OnLongClickListener,就像这样
class MainActivity : Activity(), View.OnLongClickListener {
override fun onLongClick(v: View?): Boolean {
Log.d("APP", "LongClicked: ")
return true
}
......
}
但是,我不确定如何在 Activity 本身中设置处理程序。也就是说,对于 onClick,我会在 Main Activity 的 XML 中设置 android:onClcik="onCLick",但是,我看不到对 onLongClick 执行相同操作的选项
另外,我没有设置任何属性,例如android::longClickable="true/false"
任何观点。我对真/假和实际含义感到有些困惑。
任何帮助将不胜感激。
更新
我尝试在 Main Activity 的 ListView 上调用 setOnLongCLickListener,因为我可以访问那里的 ListView。像这样
availableZonesListView = findViewById(R.id.availableZonesListView)
availableZonesListView!!.onLongClickListener(this)
MainActivity ('this') 实现了 View.OnLongClickListener,当我直接长按 MainActivity/Layout 时,我看到了那里的事件。但是当我长按 ListView 的项目时,我没有看到有事件发生
【问题讨论】:
-
那么您在适配器的哪个位置调用
View#setOnLongClickListener方法?你也需要它来做某种“上下文菜单”之类的吗? -
当我在适配器中设置 onLongClick 侦听器时(在被覆盖的 getView() 方法中),我可以在那里看到事件。但是,我不想在那里做。我宁愿在 MainActivity/Layout 中对它做出反应。希望这有意义吗?在 Main Activity/Layout 中收到事件后,我想调用 MQTT Broker 来做一些事情。
-
因此,如果您的活动实现了
View.OnLongClickListener,那么在您的活动中创建适配器时,只需将this传递给您的适配器构造函数 - 然后您将能够在@987654333 内部调用setOnLongClickListener时使用它@方法 -
适配器正在分配给处理程序中的 ListView。我宁愿不将主要活动传递给处理程序,然后从处理程序传递给适配器。我所期望的是子视图中的事件会自动传播到父母并最终传播到 MainActivity/Layout
-
处理程序?什么处理程序?
android.os.Handler? mybe 发布您的相关代码...
标签: android android-layout listview onlongclicklistener