多个项目的 GridView 项目列表选择器在 Android 中不起作用 [英] GridView item list selector for multiple items not working in Android

查看:21
本文介绍了多个项目的 GridView 项目列表选择器在 Android 中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想长按绘制选择器,如图所示.当我长按一个项目时,CAB 菜单被激活.但是单击后列表选择器指示器会熄灭一次.我希望列表选择器一直处于活动状态,直到 CAB 菜单处于活动状态以允许进行多项选择.如果我双击,颜色应该切换.当我点击它时,此代码会闪烁.有人遇到过类似的事情吗?是否有技巧可以带来此功能?

I want to draw selector on long press as shown in the picture. When I do long press on one item, the CAB menu is activated. But the list selector indicator goes off once after clicking. I want that list selectors to be active till the CAB menu is active for allowing multiple selection. And the color should toggle if I do double tap. This code works as a flicker when I click on it. Any one faced similar thing? Is there a hack to bring this functionality?

多选网格视图:

我的 OnCreate 中的 GridView setchoice:

GridView setchoice in my OnCreate:

gridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
gridView.setMultiChoiceModeListener(new MultiChoiceModeListener());

这工作正常:

gridView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v,
            int position, long id) {

    ImageView iv = (ImageView) v
                        .findViewById(R.id.imageview2);
                ViewGroup gridChild = (ViewGroup) gridView
                        .getChildAt(position);
                ViewGroup gridGrandChild = (ViewGroup) gridChild
                        .getChildAt(0);
                ViewGroup gridGreatGrandChild = (ViewGroup) gridGrandChild
                        .getChildAt(0);
                int childSize = gridGreatGrandChild.getChildCount();
                if (iv.getId() == gridGreatGrandChild.getChildAt(1)
                        .getId()) {
                    if (iv.getVisibility() == 4)
                        iv.setVisibility(View.VISIBLE);
                    else
                        iv.setVisibility(View.INVISIBLE);
                }
}});

我试图在激活 CAB 菜单后在 MultiChoiceModeListener() 类中实现相同的代码.把同样的代码复制到

I am trying to implement the same code inside the MultiChoiceModeListener() class after the CAB menu is activated. Copied the same code inside

public void onItemCheckedStateChanged(ActionMode mode, int position,
            long id, boolean checked) {
}

方法.但我无法访问视图组内的元素.但我能够访问整个 GridView.但不是网格内的单个孩子.

method. But I am unable to access the elements inside the viewgroup. But I am able to access the GridView in whole. But not the individual child inside the Grid.

这是我的 gridview 布局:

Here is my gridview layout:

    <GridView
            android:id="@+id/grid_view"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:columnWidth="190dp"
            android:drawSelectorOnTop="true"
            android:choiceMode="multipleChoice"
            android:horizontalSpacing="3dp"
            android:listSelector="@drawable/list_selector"
            android:numColumns="auto_fit"
            android:paddingRight="4dp"
            android:stretchMode="spacingWidthUniform"
            android:verticalSpacing="3dp" >
        </GridView>

GridView 中的每一项都是用这个布局构造的:

Each item in the GridView is constructed with this layout:

<FrameLayout
    android:id="@+id/frameLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:id="@+id/relativelayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <ImageView
            android:id="@+id/imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </ImageView>

        <ImageView
            android:id="@+id/imageview2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/imageview"
            android:layout_alignLeft="@+id/imageview"
            android:layout_alignRight="@+id/imageview"
            android:layout_alignTop="@+id/imageview"   
            android:visibility="invisible"
             android:background="#76f9a49c"            
             >
        </ImageView>
    </RelativeLayout>

    <ImageView
        android:id="@+id/tagimage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top|right"
        android:layout_marginRight="-4dp"
        android:src="@drawable/tag"
        android:visibility="invisible" />

    <ImageView
        android:id="@+id/countimage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="5dp"
        android:src="@drawable/dealcount_overlay"
        android:visibility="invisible" />

    <TextView
        android:id="@+id/count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginBottom="11dp"
        android:layout_marginRight="24dp"
        android:text="100"
        android:textColor="#fff"
        android:visibility="invisible" >
    </TextView>

    <ProgressBar
        android:id="@+id/progressbar"
        style="@android:style/Widget.ProgressBar.Small"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:visibility="visible" />
</FrameLayout>

<TextView
    android:id="@+id/textView_nodata"
    android:layout_width="wrap_content"
    android:layout_height="150dp"
    android:layout_below="@+id/frameLayout1"
    android:layout_centerHorizontal="true"
    android:text="No data available. Try different query!"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:visibility="gone" />

</RelativeLayout>

这是我的 list_selector.xml:

Here is my list_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@color/gridviewlistselector" android:state_focused="true" android:state_pressed="false"/>
<item android:state_focused="true"><shape>
        <solid android:color="#66000000" />
    </shape></item>
<item android:state_selected="true"><shape>
        <solid android:color="#66000000" />
    </shape></item>
<item android:state_pressed="true"><shape>
        <solid android:color="#66000000" />
    </shape></item>
<item android:state_enabled="false" android:state_focused="true"><shape>
        <solid android:color="#66000000" />
    </shape></item>

</selector>

如何实现功能?我陷入困境.我在选择器上尝试了各种组合.但似乎没有什么对我有用.我需要提供任何其他细节吗?

How can I achieve the functionality? I am getting stuck at this. I tried various combinations on Selectors. But nothing seems to be working for me. Do I need to provide any other detail?

推荐答案

我不确定这是 正确的 解决方案,但我为 android:background 设置了这个在我的列表项上:

I'm not sure it's the right solution, but I set this for the android:background on my list items:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:exitFadeDuration="@android:integer/config_mediumAnimTime" >

    <!-- I never see this one - the grid items are not focusable -->
    <item android:state_pressed="false" android:state_focused="true" android:drawable="@drawable/list_focused" />

    <!-- while pressed -->
    <item android:state_pressed="true" android:drawable="@drawable/pressed_background" />

    <!-- while selected in actionmode -->
    <item android:state_activated="true" android:drawable="@color/pressed" />

    <item android:drawable="@android:color/transparent" />
</selector>

我没有在网格视图上设置 android:listSelector 属性.

I did not set the android:listSelector attribute on the grid view.

这篇关于多个项目的 GridView 项目列表选择器在 Android 中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆