【问题标题】:On click of Android listview item's child elements (like button) are getting focus点击 Android listview 项目的子元素(如按钮)获得焦点
【发布时间】:2012-07-05 13:04:51
【问题描述】:

我有一个列表视图。列表视图中的每个项目都是自定义的。每个项目都有

文本视图1

文本视图2按钮1

文本视图1

文本视图2按钮1

文本视图1

文本视图2按钮1

点击项目按钮获得焦点。即使我在每个列表视图项的布局中给出了按钮的以下属性,我也不想获得按钮的焦点 安卓:可聚焦=“假” 安卓:focusableInTouchMode="假" 任何人请帮我解决这个问题

【问题讨论】:

    标签: android listview focus


    【解决方案1】:

    添加android:descendantFocusability="blocksDescendants",这样子View(row)就可以被屏蔽了。

    <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:descendantFocusability="blocksDescendants" />
    

    如果您想要 vise wersa,则在 item.xml 中添加 focusable and focusableInTouchMode to falseimageButton/Button

    【讨论】:

      【解决方案2】:
      public class DontPressWithParentButton extends Button {
      
      public DontPressWithParentButton(Context context) {
          super(context);
      }
      
      public DontPressWithParentButton(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
      
      public DontPressWithParentButton(Context context, AttributeSet attrs, int defStyle) {
          super(context, attrs, defStyle);
      }
      
      @Override
      public void setPressed(boolean pressed) {
          if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
              return;
          }
          super.setPressed(pressed);
      }
      }
      

      在布局文件中添加以下元素

      &lt;DontPressWithParentButton /&gt;

      希望这一切正常,没有任何缺陷

      【讨论】:

        【解决方案3】:

        前几天我遇到了同样的问题。但现在我已经解决了。

        喜欢以下。

        创建一个名为 DontPressWithParentButton 的类,它扩展 Button,如下所示:

        import android.content.Context;
        import android.util.AttributeSet;
        import android.view.View;
        import android.widget.Button;
        
        public class DontPressWithParentButton extends Button {
        
            public DontPressWithParentButton(Context context) {
                super(context);
            }
        
            public DontPressWithParentButton(Context context, AttributeSet attrs) {
                super(context, attrs);
            }
        
            public DontPressWithParentButton(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
            }
        
            @Override
            public void setPressed(boolean pressed) {
                if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
                    return;
                }
                super.setPressed(pressed);
            }
        
        }
        

        现在,在您的项目行 xml 中,定义 Button 如下所示 (添加你的包代替 YOUR_APP_PACKAGE)

        <YOUR_APP_PACKAGE.DontPressWithParentButton android:id="@+id/deleteBtn" android:layout_width="100dp"
                    android:layout_height="wrap_content" android:layout_alignParentRight="true"
                    android:textColor="#FFFFFF"
                    android:text="Approve"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    />
        

        现在在您的 java 文件中引用 id,如下所示:

        DontPressWithParentButton deleteGameBtn=(DontPressWithParentButton) findViewById(R.id.deleteGameBtn);
        

        现在运行项目。你会得到你想要的。

        如果您有任何疑问,请给我留言。

        【讨论】:

          【解决方案4】:

          试试这个:

          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:orientation="vertical"
                    android:focusable="false"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content">
          
          </LinearLayout>
          

          在整个布局上只是 Focuable false。

          【讨论】:

          • 如果你不需要任何点击事件,使用这个:android:enabled="false"
          • 列表项和按钮都有单独的点击事件,可以正常工作,但点击项目按钮时会变得很混乱
          猜你喜欢
          • 2014-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-15
          • 1970-01-01
          • 1970-01-01
          • 2016-11-11
          相关资源
          最近更新 更多