14

写真のように長押しでセレクターを描きたいです。1つの項目を長押しすると、CABメニューがアクティブになります。ただし、リストセレクターインジケーターは、クリックすると1回消灯します。複数選択を許可するためにCABメニューがアクティブになるまで、リストセレクターをアクティブにします。そして、ダブルタップすると色が切り替わるはずです。このコードをクリックすると、ちらつきとして機能します。誰もが同じようなことに直面しましたか?この機能をもたらすためのハックはありますか?

複数選択のGridview:

ここに画像の説明を入力してください

OnCreateのGridViewsetchoice:

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()クラス内に同じコードを実装しようとしています。内部に同じコードをコピーしました

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

方法。しかし、ビューグループ内の要素にアクセスできません。しかし、私はGridView全体にアクセスできます。ただし、グリッド内の個々の子ではありません。

これが私のグリッドビューのレイアウトです。

    <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の各アイテムは、次のレイアウトで構成されています。

<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です:

<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>

どうすれば機能を実現できますか?私はこれで立ち往生しています。セレクターでいろいろな組み合わせを試してみました。しかし、私には何も機能していないようです。他に詳細を提供する必要がありますか?

4

5 に答える 5

1

それが正しい解決策かどうかはわかりませんがandroid:background、リスト項目にこれを設定しました:

<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グリッド ビューで属性を設定しませんでした。

于 2013-01-17T09:02:36.477 に答える
0

これは、選択したアイテムを追跡し、アダプター内の背景を変更することで実現できます。

私はあなたがこの投稿からほとんど助けを得ることができないと思います

于 2013-01-27T07:44:56.440 に答える
0

要件に応じてカスタム ドローアブルを実装することをお勧めします。リスナーを長押しすると、必要な状態に関係なく適用できます。これは、コードをゼロから作成する方法の 1 つです。

https://github.com/rameshkec85/Example-Android-CustomDrawableStates

于 2013-01-28T04:30:38.187 に答える
0

このためには、グリッド ビュー アイテム、BackgroundColor をシングル/ロング クリックで変更する必要があります。

以下は、同じ参照コードです。

GridView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        mAdapter.setSelected(position,true);                                          
        view.setBackgroundColor(Color.XYZ);
    }
}

お役に立てれば。ありがとう。

于 2013-01-23T23:09:30.237 に答える
0

グリッドアイテムにパディングを与えます。オブジェクトの選択または選択解除を追跡するために、グリッド アダプタ内の各オブジェクトの Bean クラスを維持します。この値に基づいて、グリッド アイテムの背景色 acc を更新して、選択済み/未選択の状態にすることができます。onitemclieck listner のオブジェクト値を更新し、背景も表示します。

于 2013-01-26T19:18:27.180 に答える