ListView OnItemClickListener没有响应?

Kle*_*ine 44 java android listview

我到处寻找解决方案,但我无法弄清楚如何实现它.我的行OnItemClickListener被禁用了ListView,因为我ImageButton在行布局中有一个接管焦点.我发现了很多问题,但没有一个问题让我到处都是.

我已经检查了这个问题,但我无法真正做到这一点.我只需要一种方法来获取可点击的行,以便我可以检测何时按下一行.长按和聚焦工作正常.

jqp*_*liq 60

代替的OnItemClickListener,添加一个OnClickListener到每个从适配器返回你的看法.您需要使用setItemsCanFocus设置列表:

ListView list = (ListView) findViewById(R.id.myList);
list.setAdapter(new DoubleClickAdapter(this));
list.setItemsCanFocus(true);
Run Code Online (Sandbox Code Playgroud)

然后在你的适配器getView,这将产生一个可点击的行.假设该按钮位于膨胀的xml中.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = View.inflate(context, R.layout.cell, null);
    view.setClickable(true);
    view.setFocusable(true);
    view.setBackgroundResource(android.R.drawable.menuitem_background);
    view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            new AlertDialog.Builder(context).setTitle("touched").show();
        }

    });
    return view;
}
Run Code Online (Sandbox Code Playgroud)

  • 别忘了回收意见!使用convertView,不要每次都膨胀一个新的. (47认同)

mei*_*ilp 51

设置你ImageButton的属性:

android:focusable="false"
Run Code Online (Sandbox Code Playgroud)

因为AbsListView.onTouchEvent检查child.hasFocusable().

  • 适用于TextViews.与按钮不同. (4认同)

Jul*_*mes 10

我已经在SDK级别8和16上测试了以下解决方案.

getView()

setFocusable(false);
setClickable(false);
Run Code Online (Sandbox Code Playgroud)

而不是在适配器中设置它们是真的getView()我认为原始问题想要的,并且意味着一个OnItemClickListener被调用,只要OnClickListener没有设置getView().

我假设任何事情,你可以做一个查看的OnClickListener,你可以在做很容易ListViewOnItemClickListener.(setOnClickListener在View上隐式地将视图设置为可点击,这显然可以防止ListView相应的OnItemClickListener被调用.)

根据ImageButton物品被按压或翻转时的视觉状态,行为是人们所期望的.

解决方案是一个轻微的错觉,因为它是被按下的列表项而不是它ImageButton自己,所以如果按钮没有占据整个列表项,单击项中的其他位置仍然会使按钮的可绘制状态反映点击.焦点相同.这可能是值得付出的代价.

  • 如果你的ListView行有多个可点击项,你可以通过在顶级列表项布局中设置`android:descendantFocusability ="blocksDescendants"`来实现你想要的,而不是在你从中返回的视图上设置`OnClickListener` getView().在单个项目上设置`OnClickListener'仍然有效. (4认同)

Kap*_*aju 7

这肯定会奏效.将其添加到布局定义中.

android:descendantFocusability="blocksDescendants" 
Run Code Online (Sandbox Code Playgroud)

这里找到解决方案


小智 5

OnClickListener为每个视图设置一个替代方法是不使用ImageButton- ImageView而是使用.该ImageView仍可事件发送到OnClickListener并不会接管的焦点.


sil*_*tos 5

最好的方法是:

  android:focusable="false"
  android:focusableInTouchMode="false"
Run Code Online (Sandbox Code Playgroud)

为此设置这些属性Imagebutton并尝试.一世