Desidero disegnare il selettore su una pressione prolungata come mostrato nell'immagine. Quando eseguo una pressione prolungata su un elemento, viene attivato il menu CAB. Ma l'indicatore del selettore di lista si spegne una volta dopo aver fatto clic. Voglio che i selettori di lista siano attivi finché il menu CAB non è attivo per consentire selezioni multiple. E il colore dovrebbe alternarsi se faccio doppio tocco. Questo codice funziona come uno sfarfallio quando faccio clic su di esso. Qualcuno ha affrontato una cosa simile? C'è un trucco per portare questa funzionalità?GridView Selettore elenco oggetti per più elementi che non funzionano in Android
GridView con selezione multipla:
GridView setchoice nel mio OnCreate:
gridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
gridView.setMultiChoiceModeListener(new MultiChoiceModeListener());
Questo sta lavorando bene:
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);
}
}});
Sto cercando di implementare la stessa codice all'interno della classe MultiChoiceModeListener() af il menu CAB è attivato. Copiato lo stesso codice all'interno di
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
}
metodo. Ma non riesco ad accedere agli elementi all'interno del viewgroup. Ma sono in grado di accedere al GridView per intero. Ma non il singolo bambino all'interno della griglia.
Ecco il mio layout di 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>
Ogni elemento della GridView è costruito con questo 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>
Ecco il mio 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>
Come posso ottenere la funzionalità? Mi sto bloccando in questo. Ho provato varie combinazioni su Selectors. Ma niente sembra funzionare per me. Devo fornire altri dettagli?
Ma ho bisogno di una soluzione solo per gli elementi listSelector nel mio GridView – intrepidkarthi
sta funzionando per il multi selezionare? – intrepidkarthi
Sì. Non era richiesto nessun altro codice "CHOICE_MODE_MULTIPLE_MODAL" come il tuo. Inoltre, ho omesso gli attributi 'android: choiceMode' e' android: drawSelectorOnTop'. – dokkaebi