33

listviewListActivity. 在这里我遇到的问题是,当我单击列表项时,当闪烁颜色也没有出现时,没有执行任何操作,即橙色。那么,您对我的问题的这个友好回答有什么想法吗?

@Override
protected void onListItemClick(ListView l, View v, int position, long id) 
{
    super.onListItemClick(l, v, position, id);
    Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_SHORT)
            .show();

}

我把这段代码也放到了 Main ListActivity 中。

4

10 回答 10

122

这里首先要注意的是,只要有像按钮这样的可点击元素或ImageButtons出现在您的ListView元素中,它们就会控制点击事件。所以你ListView将没有机会接受点击事件。

您只需要做的就是将focusable属性设置为 falseButton或者ImageButton您在 ListView 中拥有的。但是它们仍然可以正常工作,而且您的 ListViewonListItemClick也可以正常工作。

尝试这个,

        <Button  android:id="@+id/textsize_increaser"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/back_button"
        android:focusable="false"
        android:text=" A + "/>

在这里我添加了这个android:focusable="false",它工作正常。试试看。

于 2012-07-24T05:39:25.577 回答
12

您是否将 ListView 的选择模式设置为 SINGLE :

     listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

如果列表项中有任何可点击的 imageview 或 textview 或按钮,则使它们不可聚焦(在您的 Adapter 类中):

        yourButton.setFocusable(false);
        yourButton.setFocusableInTouchMode(false);
于 2012-07-23T09:50:55.863 回答
4

在你的 listactivity java 文件中设置它

listview1.setFocusable(false);
于 2012-07-23T10:00:51.943 回答
4

您是否使用自定义适配器?并使用按钮或任何将列表列表视图焦点作为子项吃掉的视图来膨胀布局,那么它显然不会起作用。确保设置

    android:focusable="false"

到 xml 文件中的此类视图。希望这对你有用。

于 2012-07-23T09:58:28.807 回答
2

实际上有一个参数可以防止子视图获得焦点,只需在父布局中添加以下内容:

android:descendantFocusability="blocksDescendants"

正如文档所解释的:

ViewGroup 将阻止其后代接收焦点。

于 2016-05-28T14:28:45.740 回答
1

Eclipse 建议我textIsSelectable="true"在用于列表视图的布局 xml 中添加到我的 TextViews。

好吧,如果您想单击列表中的项目,那么您不应该添加这些标签。

于 2013-05-03T20:09:34.140 回答
1

确保你是

  1. 不将滚动视图与列表视图一起使用
  2. 不在列表视图的行项目布局中使用滚动视图

如果 Scroll View 出现在上述任何地方,请将其删除

于 2017-07-11T04:33:11.283 回答
0

请参阅此帖子以获取解决方案:

单击在 Listitem Listview android 上不起作用

View v = parent.getChildAt(position);
parent.requestChildFocus(v,view);
v.setBackground(res.getDrawable(R.drawable."Some drawable for clicked row"));

int count = parent.getChildCount();
for(int i=0; i<count; i++)
{
   if(i!=position)
   {
     v = parent.getChildAt(i);
     v.setBackground(res.getDrawable(R.drawable."some drawable for not clicked row));
   }
}
于 2013-06-27T14:35:22.120 回答
0
listview.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int pos,
                    long id) {
                Toast.makeText(v.getContext(), exm.get(pos).getDefinition(),
                        Toast.LENGTH_SHORT).show();


            }
        });
于 2014-04-12T08:24:27.983 回答
0
listItemButton.setFocusable(false);
listItemButton.setFocusableInTouchMode(false);

在您的适配器中设置上述内容。它不适用于XML

于 2018-02-19T06:21:10.007 回答