2016-07-23 9 views
0

Ich habe ein Ereignis-Listener für zwei Tasten und Ereignis-Listener für einen EditText Kontrolle in meinem Java-Code ein:Android Studio Anonym Klasse auch Zuhörer nicht

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/buttonA" 
     android:layout_below="@+id/button6" 
     android:layout_toLeftOf="@+id/button6" 
     android:layout_toStartOf="@+id/button6" 
     android:layout_marginTop="119dp" 
     android:drawableLeft="@drawable/abc_ic_star_black_16dp" /> 

    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/buttonB" 
     android:layout_alignBottom="@+id/buttonA" 
     android:layout_alignRight="@+id/button6" 
     android:layout_alignEnd="@+id/button6" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/userText" 
     android:layout_above="@+id/buttonB" 
     android:layout_alignLeft="@+id/buttonA" 
     android:layout_alignStart="@+id/buttonA" 
     android:imeOptions="actionGo" 
     android:inputType="text" 
     android:layout_alignRight="@+id/buttonB" 
     android:layout_alignEnd="@+id/buttonB" /> 

:

public void doNewButtonClick(View view) { 
    View.OnClickListener onSnap = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      TextView calculatorTextView = (TextView) findViewById(R.id.textView); 
      calculatorTextView.setText("GO TO SLEEP"); 
      Log.d(TAG, "In the Handler for NEW BUTTONS"); 

     } 
    }; 
    Button button1 = (Button) findViewById(R.id.buttonA); 
    Button button2 = (Button) findViewById(R.id.buttonB); 


    button1.setOnClickListener(onSnap); 
    button2.setOnClickListener(onSnap); 

} 

public void onEditTextInput(View view){ 
    EditText myMessage = (EditText) findViewById(R.id.userText); 
    myMessage.setOnEditorActionListener(new OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView textView, int actionID, KeyEvent event) { 
      Log.d(TAG, "BEFORE THE SEND"); 
      EditText userMessage = (EditText) textView; 
      TextView phone = (TextView)findViewById(R.id.textView2); 

      if(actionID == EditorInfo.IME_ACTION_GO){ 
       Log.d(TAG, "IN THE SEND"); 
       phone.setText(userMessage.getText()); 
      } 
      return false; 
     } 
    }); 
} 

Das ist mein xml ist Ich habe zwei Probleme: 1) Die Ereignishandler funktionieren nicht, wenn ich auch in die Eigenschaften des Steuerelements gehen und die OnClick-Eigenschaft auf die gewünschte Methode festlegen. Mit anderen Worten: Ich klicke mehrmals auf ein Steuerelement, und nichts passiert, wenn ich die OnClick-Eigenschaft nicht auf eine Funktion setze, dann funktionieren die Steuerelemente und ihre Ereignisbehandlungsroutinen wie erwartet.

2) Wenn Sie die OnClick-Eigenschaft jedes Steuerelements auf den gewünschten Ereignishandler (Callback-Funktion) festlegen, muss ich zweimal auf das Steuerelement klicken, damit es funktioniert. Dies geschieht, da ich die OnClick-Eigenschaft und auch die OnClick-Funktion im Event-Handler festlege.

Warum reagieren meine Ereignishandler nicht? Warum muss ich die OnClick-Eigenschaft festlegen? Muss ich die OnClick-Eigenschaft festlegen und nicht die Anonyme Klassenmethode verwenden, um Ereignishandler zu erstellen?

Vielen Dank !!

+0

Mögliche Duplikate von [Wie Knopf-Klicks mit dem XML-onClick innerhalb von Fragmenten behandelt werden] (http://stackoverflow.com/questions/6091194/how-to-handle-button-clicks-using-the-xml-onclick- innerhalb von Fragmenten) – SaravInfern

Antwort

0

Sie einfache Verwendung onClick Eigenschaft auf die Schaltfläche kann wie unten

<Button 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/buttonB" 
    android:onClick="doNewButtonClick" //<--- Like this 
    android:layout_alignBottom="@+id/buttonA" 
    android:layout_alignRight="@+id/button6" 
    android:layout_alignEnd="@+id/button6" /> 

Und Ihre Methode wird

public void doNewButtonClick(View v){ 
    // you can handle different views based on the 
    //'id' you get v.getId() and handle different functionalities for each button. 
} 

Oder einfach

Button btn = (Button) findViewById(R.id.mybutton); 

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // do anything 
    } 
}); 

Sie können entweder eine von ihnen benutzen, gezeigt .

Verwandte Themen