其他分享
首页 > 其他分享> > android – 单击ListView项目更改项目内元素的状态?

android – 单击ListView项目更改项目内元素的状态?

作者:互联网

我不知道如何解释这个问题,但我会试试.我有一个包含几个项目的ListView.每个项目都有一个TextView和两个ImageView.我想在单击它们时更改ImageView,并且当我长按ListView项目时,我想打开上下文菜单.

对于ImageView,一切正常.对于整个项目,我可以在长按后显示上下文菜单,但我的问题是,当我按下TextView时,ImageView也会改变.

索莫的代码片段:

ListView项目:

     <TextView 
      android:id="@+id/title"
      android:textColor="@color/black"
      android:maxLines="2"
      android:textSize="14dip" 
            />
    <ImageView
        android:id="@+id/minus"
        android:src="@drawable/minusbutton"
        android:adjustViewBounds="true"
        android:gravity="center"
    />
    <ImageView 
        android:id="@+id/plus"
        android:src="@drawable/plusbutton"
        android:adjustViewBounds="true"
        android:gravity="center"
    />

可绘制以更改加号按钮的状态:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
      android:drawable="@drawable/button_add_normal_disabled" />
<item android:state_enabled="true"
      android:state_pressed="true"
      android:drawable="@drawable/button_add_pressed" />
<item android:state_enabled="true"
      android:state_focused="true" 
      android:state_pressed="false" 
      android:drawable="@drawable/button_add_active" />
<item android:state_enabled="true"
      android:state_focused="false" 
      android:state_pressed="false"
      android:drawable="@drawable/button_add_normal" />

我希望你理解我的问题.我认为一个观点的所有孩子都受到父母的一个事件的影响,但我不确定.

你有解决方案吗?提前致谢

解决方法:

解决此问题的最简单方法是继承viewgroup并覆盖dispatchSetPressed.

这是一个例子

public class DuplicateParentStateAwareLinearLayout extends LinearLayout {

    public DuplicateParentStateAwareLinearLayout(Context context) {
        super(context);
    }

    public DuplicateParentStateAwareLinearLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public DuplicateParentStateAwareLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /*
     * By default ViewGroup call setPressed on each child view, this take into account duplicateparentstate parameter
     */
     @Override
     protected void  dispatchSetPressed(boolean pressed) {
          for (int i = 0; i < getChildCount(); i++) {
             View child = getChildAt(i);
             if (child.isDuplicateParentStateEnabled()){
                 getChildAt(i).setPressed(pressed);
             }
         }
      }
}

使用此方法的catch是,您必须为您想要的每个项目和不应具有此行为的子项设置duplicateparentstate为true.

标签:listviewitem,android,events,listview,click
来源: https://codeday.me/bug/20190724/1518794.html