ListView with OnItemClickListener android

Nik*_*ddy 71 android listview

我使用的是自定义的ListViewRatingBarImageButton.这是我的问题:当我点击我的时候ListView,我OnItemClickListener的工作无效.请任何人帮助我.码:

ListView lv = getListView();
setContentView(lv);
lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        Toast.makeText(SuggestionActivity.this, "" + position, Toast.LENGTH_SHORT).show();
    }
});
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Sha*_*aaz 115

虽然这是一个非常古老的问题,但我仍然会发布一个答案,以便它可以帮助一些人.如果您在列表视图中使用任何布局,请使用...

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

...在列表中的第一个父布局上.这就像魔术一样,点击不会被列表中的任何元素占用,而是直接转到列表项.

  • 真棒.它帮助了很多 (2认同)

小智 17

嘿检查这个,对我有用...希望它对你也有效

如果列表项包含 ImageButton

问题:OnItemClickListener根本没有任何反响!

理由:不知道

解决方案:在代码中,将ImageButton焦点设置为“false”

1: ImageButton button = (ImageButton) convertView.findViewById(R.id.imageButton);

2: button.setFocusable(false);


pos*_*ssy 15

我有一个扩展ListActivity的Activity.

我尝试在onCreate中做这样的事情:

ListView listView = getListView();
listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

        Log.i("Hello!", "Y u no see me?");

    }

});
Run Code Online (Sandbox Code Playgroud)

但那没用.

相反,我只需要覆盖onListItemClick:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    Log.i("Hello!", "Clicked! YAY!");

}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅适用于ListActivity和ListFragment (2认同)

Rah*_*ari 10

如果要在列表视图中启用项目单击,使用

listitem.setClickable(false);
Run Code Online (Sandbox Code Playgroud)

乍一看这看起来可能不对,但它确实有效!


RVG*_*RVG 10

如果列表项视图包含按钮或复选框或图像按钮,则onitemclicklistener和onitemlongclicklistener无法正常工作,因为它具有自己的onclick侦听器.

将焦点设置为false

holder.button.setFocusable(false);
Run Code Online (Sandbox Code Playgroud)


Mar*_*era 8

1)检查您是否使用OnItemClickListener或OnClickListener(ListView不支持)
文档Android开发人员ListView

2)检查是否正确地将Listener添加到ListView.它挂在ListView而不是ListAdapter上!

ListView.setOnItemClickListener(listener);
Run Code Online (Sandbox Code Playgroud)

3)如果您需要使用OnClickListener,请检查您是否使用DialogInterface.OnClickListenerView.OnClickListener(如果未经验证或使用这两者,则可以轻松交换)


小智 5

listPaired = (ListView) findViewById( R.id.listView1 );
listPairedData = new ArrayList < String >();
araPaired = new ArrayAdapter( this, android.R.layout.simple_list_item_1, listPairedData );
listPaired.setAdapter( araPaired );
listPaired.setOnItemClickListener( listPairedClickItem );

private OnItemClickListener listPairedClickItem = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView < ? > arg0, View arg1, int arg2, long arg3) {

        String info = ( (TextView) arg1 ).getText().toString();
        Toast.makeText( getBaseContext(), "Item " + info, Toast.LENGTH_LONG ).show();
    }
};
Run Code Online (Sandbox Code Playgroud)


bhe*_*ker 5

您也可以使用lambda。Java 1.7或更早版本的JVM不支持Lambda语法。

listView.setOnItemClickListener((parent, view, position, id) -> {
    ...
});
Run Code Online (Sandbox Code Playgroud)