2012-03-19 15 views
5

Ho cinque Modifica testo nella mia applicazione. Ho anche due pulsanti chiamati "Avanti" e "Precedente". Ora voglio selezionare i campi di testo di modifica successivi e precedenti quando faccio clic sui pulsanti corrispondenti formano la mia vista in modo dinamico. C'è un modo per fare questo.Come selezionare successivo e precedente Modificare i testi in una vista

+1

Non puoi usare ** requestFocus() * * – ngesh

+0

Vuoi dire che vuoi cambiare lo stato attivo da un EditText al prossimo/precedente quando il pulsante corrispondente viene toccato? –

+0

@ sandy- Grazie per il suggerimento. Quanto sopra è la mia applicazione di esempio e nel mio progetto reale ci sono circa 50 campi di testo di modifica, quindi fare focus sulle richieste per ogni campo è così complesso. C'è un modo semplice per farlo. – Sniper

risposta

11
btnNext.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     int id = getCurrentFocus().getNextFocusDownId(); 
     if(id != View.NO_ID) { 
      findViewById(id).requestFocus(); 
      System.out.println("Next"); 
     } 
    } 
}); 

btnBack.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     int id = getCurrentFocus().getNextFocusUpId(); 
     if(id != View.NO_ID) { 
      findViewById(id).requestFocus(); 
      System.out.println("Back"); 
     } 
    } 
}); 

Questa è l'XML in cui è necessario impostare la messa a fuoco ordine

<EditText 
    android:id="@+id/et1" 
    android:nextFocusDown="@+id/et2" 
    android:nextFocusUp="@+id/et2" 
    ....../> 

<EditText 
    android:id="@+id/et2" 
    android:nextFocusDown="@+id/et1" 
    android:nextFocusUp="@+id/et1" 
    ...../> 

Modifica

Se si sta creando visione dinamica quindi si dovrebbe utilizzare sotto i metodi per impostare la messa a fuoco successivo

setNextFocusDownId(id) 
setNextFocusUpId(id); 
+0

Posso usarlo in un codice XLM ma sto creando testo di modifica in fase di esecuzione, quindi non posso farlo. Qualche suggerimento. – Sniper

+1

Ho aggiornato la mia risposta – Dharmendra

+0

Grazie funziona. – Sniper

3

Fare uso di

android:nextFocusLeft 

android:nextFocusRight 

android:nextFocusUp 

android:nextFocusDown 

negli attributi del vostro EditText nel vostro layout.xml.

ad es. android:nextFocusDown="@id/myNextEditText"

Per maggiori dettagli su come utilizzarlo si prega di seguire this link.

+0

Come posso usarlo nel mio evento click sul pulsante. – Sniper

+0

Si prega di controllare la mia risposta aggiornata, ho dato il collegamento da seguire. Oppure se stai generando le tue viste dinamicamente, cioè attraverso i file .java, puoi fare riferimento alla mia seconda risposta. – Rajkiran

1

Try -

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btn_next : 
      if(editText1.hasFocus()){ 
       editText2.requestFocus(); 
      }else if(editText2.hasFocus()){ 
       editText3.requestFocus(); 
      } 
      break; 
     case R.id.btn_previous : 
      if(editText2.hasFocus()){ 
       editText1.requestFocus(); 
      }else if(editText3.hasFocus()){ 
       editText2.requestFocus(); 
      } 
      break; 
    } 
} 
+0

Sintassi errata (editText1! .hasFocus()) dovrebbe essere (! EditText1.hasFocus()). Ciò non sarà di aiuto. secondo la tua logica focalizzerà solo edittext1 ed edittext2 – Dharmendra

+0

Grazie per avermelo fatto notare. Quello era assolutamente un refuso (e copia incolla). Questo è un errore di sintassi in realtà. Modificato. – Rajkiran

Problemi correlati