我有一个包含一堆子视图的主活动,然后我有一个ListView,其项目是动态生成的。我希望能够长按任何这些项目并在主活动中处理此事件。
MainActivity
LinearLayout
ListView
Item - (long click here)
现在我知道如何订阅动态创建的ListView项本身的onLongClick事件,但是我在用于创建项目的适配器中。
我希望的是,我可以简单地订阅主活动的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,我会在主要活动的XML中设置android:onClcik="onCLick"
,但是,我没有看到为onLongClick
执行相同操作的选项
此外,我不设置任何属性,例如android::longClickable="true/false"
任何观点。我对真/假和实际意味着什么感到困惑。
任何帮助都将不胜感激。
更新
我尝试在主活动中调用ListView上的setOnLongCLickListener
,因为我可以在那里访问ListView。像这样
availableZonesListView = findViewById(R.id.availableZonesListView)
availableZonesListView!!.onLongClickListener(this)
MainActivity('this')实现了View.OnLongClickListener,当我直接长按MainActivity / Layout时,我看到那里发生的事件。但是,当我长按ListView的项目
时,我看不到有事件进入答案 0 :(得分:0)
现在我知道如何订阅动态创建的ListView项目本身的onLongClick事件,但是我用来创建项目的适配器中的那些事件。
public MainActivity extends .. implements MyClickListener {
... onCreate {
... = new MyAdapter(yourParams, this); // `this` is the new param
}
@Override
public void onAnyItemLongClicked() {
// Do whatever you want
}
}
创建新界面:
interface MyClickListener {
void onAnyItemLongClicked();
}
然后在您的适配器中"现在我知道如何订阅onLongClick事件" 。它会是这样的:
public class MyAdapter {
// other fields
private final MyClickListener listener;
public MyAdapter(otherParams, MyClickListener listener) {
.. assign other params
this.listener = listener;
}
}
// However you set your item click listener (in getView)
adapter.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public void onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
listener.onAnyItemLongClicked();
}
});
这会将click事件从适配器传播到活动。
(我不得不即兴发挥,因为你没有分享很多代码细节)