2013-01-17 21 views
14

Resimde görüldüğü gibi uzun basında seçici çekmek istiyorum. Bir öğeye uzun basıldığında, CAB menüsü etkinleştirilir. Ancak liste seçim göstergesi tıklandıktan sonra bir kez söner. Birden fazla seçim için CAB menüsü aktif olana kadar liste seçicilerinin aktif olmasını istiyorum. Çift musluk yaparsam ve renk değişmeli. Bu kod üzerine tıkladığımda bir titreme gibi çalışır. Herhangi biri benzer bir şeyle karşılaştı? Bu işlevi getirmek için bir hack var mı? Birden seçimleAndroid'de çalışmayan birden çok öğe için GridView öğe listesi seçici

Gridview: my OnCreate içinde

enter image description here

GridView setchoice: Bu iyi çalışıyor

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

aynı uygulamaya çalışıyorum MultiChoiceModeListener() sınıfı af içindeki kod CAB menüsü etkinleştirildi. Aynı kodu,

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

yönteminde kopyalayın. Ancak, görünüm grubundaki öğelere erişemiyorum. Ama GridView'a tamamen erişebiliyorum. Ama Grid'deki bireysel çocuk değil.

GridView'da her bir öğe bu düzen ile inşa edilmiştir
<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> 
: Burada

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

benim list_selector.xml İşte

benim GRIDVIEW düzenidir

İşlevselliği nasıl sağlayabilirim? Buna takılıyorum. Seçicilerde çeşitli kombinasyonlar denedim. Ama hiçbir şey benim için çalışmıyor gibi görünüyor. Başka ayrıntı vermem gerekiyor mu?

cevap

1

Ben doğru çözüm olduğundan emin değilim, ama benim liste öğeleri android:background için bu ayarlayın: Ben ızgara görünümü üzerinde android:listSelector özelliğini set vermedi

<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

Ama – intrepidkarthi

+0

o çoklu seçmek için çalıştığını benim GRIDVIEW sadece listSelector öğeleri için çözüm gerekir? – intrepidkarthi

+0

Evet. Başka bir kod gerekli değildi. 'CHOICE_MODE_MULTIPLE_MODAL' sizinki gibi. Ayrıca, android: choiceMode ve android: drawSelectorOnTop' özniteliklerini bıraktım. – dokkaebi

0

Bunun için, Izgara Görünüm Öğesini, BackgroundColor'u tek/uzun tıklamayla değiştirmeniz gerekir.

Aşağıda aynı için, referans kodu:

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

Umut bu yardım en. Teşekkürler.

+0

Üstte şeffaf bir kaplamaya ihtiyacım var. Arka planda değil. – intrepidkarthi

+0

Ardından setBackgroundColor'u çağırmanıza gerek yoktur, ancak arka plan görünümünüzün saydam olması gerektiğini unutmayın (üst üste gelmek için). SetSelected() öğesini çağırdıktan sonra, Kılavuz görünümü seçicinin XML öğesine göre öğeyi seçmelidir. –

0

Izgara öğenize dolgu malzemesi verin. İzleme nesnesinin izlenmesi veya seçilmemiş olması için ızgara adaptöründeki her nesne için bakla sınıfını koruyun. Bu değere bağlı olarak, seçili/seçili olmayan durumlarını görmek için ızgara öğesi arka plan renginizi güncelleyebilirsiniz. Nesne değerini onitemclieck listleyicide güncelleyin ve arka planı da görüntüleyin.

0

Bu, seçilen öğeleri izleyerek ve arka planlarını adaptörün içinde değiştirerek elde edilebilir.

ünüz veya requirement.In uzun basma dinleyici göre özel çekilebilir uygulamak için önerilen m this post

İlgili konular