2013-04-18 12 views
10

Ho iniziato a lavorare con Xamarin Studio una settimana fa e non sono riuscito a trovare una soluzione al problema successivo: creato un edittext che conterrà numeri seriali. Mi piacerebbe che ro esegua una funzione dopo che è stato premuto Immettere. Sta funzionando bene, quando premo Immettere, la funzione viene eseguita senza errori, ma non posso modificare il contenuto di edittext (non riesco a digitare in esso).Xamarin Android EditText tasto Invio

Il codice:

EditText edittext_vonalkod = FindViewById<EditText>(Resource.Id.editText_vonalkod); 
edittext_vonalkod.KeyPress += (object sender, View.KeyEventArgs e) => 
{ 
    if ((e.Event.Action == KeyEventActions.Down) && (e.KeyCode == Keycode.Enter)) 
    { 
     //Here is the function 
    } 
}; 

Questo è il codice del controllo:

<EditText 
    p1:layout_width="wrap_content" 
    p1:layout_height="wrap_content" 
    p1:layout_below="@+id/editText_dolgozo_neve" 
    p1:id="@+id/editText_vonalkod" 
    p1:layout_alignLeft="@+id/editText_dolgozo_neve" 
    p1:hint="Vonalkód" 
    p1:text="1032080293" 
    p1:layout_toLeftOf="@+id/editText_allapot" /> 

Ho cercato di usare edittext_vonalkod.TextCanged con i suoi argomenti, il problema riservati. Posso modificare il contenuto ma non posso gestire Immettere la chiave.

Grazie!

risposta

5

È necessario contrassegnare l'evento come non gestito quando il tasto premuto è ENTER. Inserisci il seguente codice all'interno del tuo gestore KeyPress.

if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter) 
{ 
    // Code executed when the enter key is pressed down 
} 
else 
{ 
    e.Handled = false; 
} 
9

L'approccio migliore sarebbe quella di utilizzare l'evento EditorAction che è stato progettato per essere attivato sul Enter pressione di un tasto. Sarebbe un codice come questo:

edittext_vonalkod.EditorAction += (sender, e) => { 
    if (e.ActionId == ImeAction.Done) 
    { 
     btnLogin.PerformClick(); 
    } 
    else 
    { 
     e.Handled = false; 
    } 
}; 

E per essere in grado di cambiare il testo del Enter usare pulsante imeOptions sul XML:

<EditText 
    p1:layout_width="wrap_content" 
    p1:layout_height="wrap_content" 
    p1:layout_below="@+id/editText_dolgozo_neve" 
    p1:id="@+id/editText_vonalkod" 
    p1:layout_alignLeft="@+id/editText_dolgozo_neve" 
    p1:hint="Vonalkód" 
    p1:text="1032080293" 
    p1:layout_toLeftOf="@+id/editText_allapot" 
    p1:imeOptions="actionSend" /> 
3

provare questo:



    editText = FindViewById(Resource.Id.editText);  
    editText.KeyPress += (object sender, View.KeyEventArgs e) => 
    { 
     e.Handled = false; 
     if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter) 
     { 
      //your logic here 
      e.Handled = true; 
     } 
    }; 

0

Ancora meglio è creare un'estensione riutilizzabile in EditText (EditTextExtensions.cs):

public static class EditTextExtensions 
{ 
    public static void SetKeyboardDoneActionToButton(this EditText editText, Button button) 
    { 
     editText.EditorAction += (sender, e) => { 
      if (e.ActionId == ImeAction.Done) 
      { 
       button.PerformClick(); 
      } 
      else 
      { 
       e.Handled = false; 
      } 
     }; 
    } 
}