【问题标题】:ListView item with a button on it swallows touch events带有按钮的 ListView 项目会吞下触摸事件
【发布时间】:2011-03-07 13:56:58
【问题描述】:

我正在开发一个 android 应用程序,在该应用程序中显示项目列表并允许用户单击星形图标以收藏项目,然后将显示在单独的活动中。

对于这个列表,我使用了一个相对布局,一个 ImageView 作为图标,一个 TextView 作为项目名称,一个 Button 作为收藏按钮。

我遇到的问题是,如果没有按钮,列表项会正确触摸并在触摸时发光。使用按钮,但是它们不会正确发光,但是它们会触发我放置在 relativeLayout 的 android:onClick xml 属性中的任何方法

有谁知道解决这种行为的方法吗?

【问题讨论】:

    标签: android listview android-layout


    【解决方案1】:

    使用 ImageButton 时,您必须调用

    myImageButton.setFocusable(false);
    

    以编程方式,因为它的构造函数将其设置为 true。您可以通过覆盖适配器的 getView 方法来做到这一点:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        view.findViewById(R.id.idOfYourImageButton).setFocusable(false);
        return view;
    }
    

    【讨论】:

      【解决方案2】:

      您是否将列表视图focusable 设置为false

      这里有一些类似的问题

      Focusable EditText inside ListView

      Using a checkbox with a false focusable, still prevents listview clicks

      还有更多here

      【讨论】:

        【解决方案3】:

        有很多关于这个的 stackoverflow 问题,但似乎没有一个简单的解决方案,所以我在这里发布对我有用的问题:

        我的具体示例涉及一个 ListFragment,列表视图中的每个项目都包含一个标准按钮。我希望按钮和列表视图可以分别点击。

        在 listFragment 中,添加:

            @Override
            public void onActivityCreated (Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
        
                this.getListView().setItemsCanFocus(false);
            }
        

        在行项目的 xml 中,将其添加到 Button XML:

        android:focusable="false"
        

        .. 就是这样。对我有用。

        【讨论】:

        • 这仍然允许通过轨迹球聚焦吗?更喜欢支持轨迹球的解决方案,因为许多旧手机仍在使用它们。
        • 另一个小问题:单击该行会使按钮显示为按下状态,即使它在该行上注册了onListItemClick(而不是为按钮注册了onClick)。有什么解决办法吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-07
        • 2018-03-15
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多