2015-06-01 11 views
5

Ho un layout semplice, un listview e due icone per il filtraggio e le opzioni di ordinamento. Quando clicco su una delle due opzioni, ho un layout che si trova sopra la listview e copre solo il 60% dello schermo, rendendo in tal modo parzialmente visibile la listview sottostante. Quello che voglio ottenere è disabilitare anche lo scrolling per quella listview, nessuna voce di listview dovrebbe essere cliccabile a condizione che l'overlay sia visibile.Disabilita Android scorri e fai clic per listview

Ho provato ad utilizzare

setEnabled(false) 
setClickable(false) 

sul ListView, ma non fa alcuna differenza. Quali sono altri modi per raggiungere questo obiettivo.

risposta

0

È possibile utilizzare questo per disabilitare l'ScrollView genitore

parentview.requestDisallowInterceptTouchEvent (true);

se l'overlay è visibile.

+0

che lo renderebbe perfetto. Grazie –

+0

se così avresti potuto accettare il mio ans? – Sivaranjani

0

Per disattivare lo scorrimento è possibile utilizzare il OnTouchListener()

listView.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_MOVE) { 
      return true; // Indicates that this has been handled by you and will not be forwarded further. 
     } 
     return false; 
    } 
}); 

O

listView.setScrollContainer(false); 

Per disabilitare il clic, nella vostra abitudine ArrayAdapter sovrascrivere il metodo isEnabled come segue

@Override 
public boolean isEnabled(int position) { 
    return false; 
} 
+0

E se voglio abilitare nuovamente la cliccabilità? –

+0

"return true;" in isEnabled. Puoi usare un booleano e restituirlo in base alle tue necessità. –

+0

se non sbaglio isEnabled potrebbe funzionare quando creo la lista inizialmente, cioè quando caricherò la lista, capisco che in tal caso isEnabled potrebbe funzionare in base a qualsiasi condizione che applico e impostare la cliccabilità della vista, ma lo farebbe funziona anche dopo che il listview è già stato creato e dopo di ciò su qualche azione del clic dell'utente desidero decidere la possibilità di fare clic? Sono un po 'confuso su questo fronte. –

1

Suggerisco che l'overlay wil Sarò su tutto lo schermo. Quindi, è possibile avvolgere la sovrapposizione con il layout lineare (verticale) con i pesi (per ottenere un rapporto del 60%/40%). Nel layout lineare, posiziona il tuo overlay corrente come primo figlio e come secondo figlio aggiungi una vista trasparente che bloccherà gli eventi touch. In questo modo non avrai bisogno di apportare modifiche alla visualizzazione elenco.

+0

Perché non rendere il contenitore delle opzioni del filtro un elemento secondario dell'overlay (sarà necessario creare il relativo layout/struttura del riquadro). Hai provato quello che ho suggerito? –

+0

Ho seguito il tuo suggerimento, ma invece di usare second child trasparente per bloccare gli eventi touch, la mia maschera overlay semitrasparente funziona per me. –