ListView onItemClickListener与适配器中的自定义侦听器有什么区别?

时间:2018-01-21 21:08:36

标签: android listview android-edittext onitemclicklistener

我有一个带有 editText 项目的 ListView 我的列表视图可以点击。单击时,将打开详细信息屏幕。 每个ListView行都有一个editText。单击EditText时,键盘会打开并输入一个数字。

由于我在列表行中有可聚焦项目时无法使用onItemClickListener,因此我选择使用自定义侦听器。在适配器中:

@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
    convertView.setOnClickListener(view -> {
        onCustomClickListener.onItemClick(position);
    });
}

onCustomClickListener在Fragment中实现。这个解决方案对我有用。

我的问题是onItemClickListener和这个自定义监听器有什么区别? onItemClickListener是否以某种方式进行了优化,这就是我们通常使用它的原因?

ListView 中,我们不能同时拥有行(可聚焦)和也可以可聚焦(editText)的项目。如果我们在列表行中有editText,那么如果我们不添加: onItemClickListener将不会被调用: 列表row.xml布局中的android:descendantFocusability="blocksDescendants"

谢谢。

1 个答案:

答案 0 :(得分:0)

由于我看不到你的片段代码,我只能猜测,有一种切换案例,它按位置选择EditView,对吧?使用这种监听器没有优化。正如你所说,

  

因为如果我在列表行中有可聚焦的项目,我就不能使用onItemClickListener

所以你设置到每一行的实现视图一个从片段调用自定义监听器的监听器只是一个黑客来处理引用的问题。