2012-02-16 11 views
11

So che questa è una domanda che è stata posta molte volte prima, ma non riesco a risolverlo nel mio codice. Ho due pulsanti e quando ne viene premuto uno, vorrei mantenerlo nel suo stato selezionato, e viceversa. Ho provato a farlo usando ma setSelected e setPressed, ma non riesco a farlo funzionare. Ecco il codice che sto usando:mantenere il pulsante Android selezionato stato

region_button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      objects = category; 
      adap.notifyDataSetChanged(); 
      proximity_button.setPressed(false); 
      region_button.setPressed(true); 

     } 
    }); 

    proximity_button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      objects = proximity; 
      adap.notifyDataSetChanged(); 
      region_button.setPressed(false); 
      proximity_button.setPressed(true); 

     } 
    }); 

Edit: Sulla base delle osservazioni, ho bisogno di aggiungere che ho un fondo XML personalizzato per i pulsanti, e vorrei mantenere l'aspetto attuale.

+1

Perché non usi solo RadioGroup e RadioButton, quindi imposta gli attributi giusti sui tuoi RadioButton, usando un selettore dovrebbe fare il trucco! – Cehm

risposta

16

Ok, quindi ho usato la funzionalità di ricerca di Google di Internet: p e ho trovato il folowing: This threa don StackOverflow...

mycodes_Button.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       mycodes_Button.setPressed(true); 
       return true; 
      } 
     }); 

Ma leggere il commento, è piuttosto interessante!

+0

Quasi a destra, solo per riferimento di altri, anche l'altro stato del pulsante deve essere impostato su false, ma accetterò comunque perché mi ha indirizzato sulla giusta traccia. Grazie! – coder

+4

utilizzando setSelected (http://stackoverflow.com/a/3417158/667834) ha funzionato meglio per me in modo da poter disporre ancora delle funzionalità in fase di rilascio – richy

3

Perché stai utilizzando i pulsanti? CheckBox o RadioGroup è la soluzione migliore per questi casi

checkBox.setChecked(false); 
+1

Non se non ti piace l'interfaccia utente delle caselle di controllo. –

+2

Puoi cambiarlo in qualsiasi cosa tu voglia –

+0

A seconda delle esigenze, sì, potresti. –

1

Ecco un pensiero, disattivare il pulsante premuto e attivare gli altri. Disporre della disposizione dei pulsanti disabilitata simile al layout premuto. L'utente lo vedrà come premuto, ma in realtà è disabilitato.

0

Una casella di controllo potrebbe funzionare, ma se siete dopo un'interfaccia utente più vicino UISegmentedControl su iOS, il che è possibile avvolgendo tutti i pulsanti necessari in un LinearLayout, allora si potrebbe fare qualcosa sulla falsariga di:

public void onClick(View v){ 
    if (v.getID == R.id.btn1) { 
     btn1.setEnabled(false); 
     btn2.setEnabled(true); 
     // do stuff 
    } 
    else if (v.getId() == R.id.btn2) { 
     btn2.setEnabled(false); 
     btn1.setEnabled(true); 
     // do stuff 
    } 
} 

Ovviamente, nella cartella drawable, aggiungerei colore di sfondo, bordi e altri elementi visivi per ogni stato.

+0

Sto cercando un aspetto simile a NSSegmentedControl su iOS, ma il problema con la soluzione è che una volta che un pulsante non è abilitato, facendo nuovamente clic su di esso non verrà eseguito nulla. – coder

+0

@coder Questa è l'idea alla base di UIsegmentedControl (il mio male prima per l'errore di battitura). Per riattivare un pulsante disabilitato, è necessario premere un altro. Funziona esattamente come un gruppo radio. –

Problemi correlati