14

그림과 같이 길게 누를 때 선택자를 그립니다. 한 항목을 길게 누르면 CAB 메뉴가 활성화됩니다. 그러나 목록 선택기 표시기는 클릭 한 번 해제됩니다. 여러 선택을 허용하기 위해 CAB 메뉴가 활성화 될 때까지 목록 선택기를 활성화하고 싶습니다. 더블 탭을하면 색상이 바뀌어야합니다. 이 코드는 클릭 할 때 깜박임처럼 작동합니다. 어느 누구도 비슷한 것을 직면 했습니까? 이 기능을 구현할 수있는 해킹이 있습니까? 여러 선택과안드로이드에서 작동하지 않는 여러 항목에 대한 GridView 항목 목록 선택자

GRIDVIEW 내에서 OnCreate에서

enter image description here

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

:

<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> 
: 여기

<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입니다 여기에

내있는 gridview 레이아웃입니다

어떻게 기능을 얻을 수 있습니까? 나는 이것에 집착하고있다. Selectors에서 다양한 조합을 시도했습니다. 그러나 아무것도 나를 위해 일하는 것 같습니다. 다른 세부 정보를 제공해야합니까?

답변

1

나는 그것이 바로 솔루션입니다 모르겠지만, 내 목록 항목에 android:background이 설정 : 나는 그리드보기에 android:listSelector 속성을 설정하지 않은

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

.

+0

하지만 – intrepidkarthi

+0

이 다중 선택을 위해 노력하고 있습니다 내있는 gridview 만 listSelector 항목에 대한 솔루션이 필요합니다? – intrepidkarthi

+0

예. 다른 코드는 필요하지 않습니다. 너 같은 'CHOICE_MODE_MULTIPLE_MODAL'. 또한, 나는 android : choiceMode와 android : drawSelectorOnTop 속성을 생략했다. – dokkaebi

0

이렇게하려면 단일/장기 클릭시 Grid View Item, 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); 
    } 
} 

희망이 도움의. 감사.

+0

상단에 투명 오버레이가 있어야합니다. 배경이 아닙니다. – intrepidkarthi

+0

그런 다음 setBackgroundColor를 호출 할 필요는 없지만보기의 배경이 투명해야 함을 기억하십시오 (위에 오버레이를 얻으려면). 일단 setSelected()를 호출하면 격자보기는 선택기 XML에 따라 항목을 선택해야합니다. –

0

그리드 항목에 패딩을줍니다. 개체를 추적 할 그리드 어댑터의 각 개체에 대한 빈 클래스를 유지하거나 선택 취소합니다. 이 값에 따라 그리드 아이템 배경색을 선택 상태/선택 해제 상태로 업데이트 할 수 있습니다. onitemclieck listner에서 개체 값을 업데이트하고 배경을 봅니다.

0

선택한 항목을 추적하고 어댑터 내에서 배경을 변경하면이 작업을 수행 할 수 있습니다.

난 당신이 내가 당신의 requirement.In 길게 누르면 리스너에 따라 사용자 정의 드로어 블을 구현하기 위해 제안 있어요 this post

관련 문제