14

長押しでセレクタを描画したいと思います。 1つの項目を長押しすると、CABメニューがアクティブになります。しかし、リストセレクタインジケータは、クリックした後に一度オフになります。私はCABメニューが複数の選択を可能にするためにアクティブになるまで、リストセレクタをアクティブにしたい。ダブルタップすると色が切り替わるはずです。このコードは、クリックするとちらつきとして機能します。誰も似たようなことに直面した?この機能を実現するためのハックはありますか?複数のアイテムのGridViewアイテムリストセレクタがAndroidで動作しない

複数選択してGridViewの:

enter image description here

私のOnCreateイベントでGridViewのsetchoice:

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); 
       } 
}}); 

私は同じことを実現しようとしていますMultiChoiceModeListener()クラス内のコードaf CABメニューが有効になります。同じコードを内部にコピーしました

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

メソッドです。しかし、私はビューグループ内の要素にアクセスすることができません。しかし、私は全体的にGridViewにアクセスすることができます。しかし、グリッド内の個々の子供ではありません。ここで

は私の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> 

どのように機能を達成できますか?私はこれに立ち往生している。私はセレクタについて様々な組み合わせを試みました。しかし、何も私のために働いているようです。他の詳細を記入する必要がありますか?

答えて

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属性を設定しませんでした。

+0

しかし、私は、私のGridViewの – intrepidkarthi

+0

で唯一listSelector項目のソリューションは、それがマルチ選択のために働いている必要がありますか? – intrepidkarthi

+0

はい。他のコードは必要ありませんでした。あなたのような 'CHOICE_MODE_MULTIPLE_MODAL'また、属性 'android:choiceMode'と' android:drawSelectorOnTop'を省略しました。 – dokkaebi

0

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

以下は同じのために、参照コードです:

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

・ホープこのヘルプの。ありがとう。

+0

上に透明なオーバーレイが必要です。バックグラウンドではありません。 – intrepidkarthi

+0

次に、setBackgroundColorを呼び出す必要はありませんが、ビューの背景が透明であることを覚えておいてください(上にオーバーレイを表示するには)。 setSelected()を呼び出すと、グリッドビューはセレクタXMLに従ってアイテムを選択する必要があります。 –

0

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

0

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

は、私はあなたが私はあなたのrequirement.In長押しリスナーごとなどのカスタムドローアブルを実装することが示唆mはthis post

関連する問題