2013-11-23 4 views
39

Also füge ich einige der Forschung getan haben, und Sie Taste als Objekt durch den Codewie Schaltfläche Click-Ereignis in Android Studio

private Button buttonname; 
buttonname = (Button) findViewById(R.id.buttonnameinandroid) ; 

hier ist mein Problem

buttonname.setOnClickListener(this); //as I understand it, the "**this**" denotes the current `view(focus)` in the android program 

dann nach der Definition Ihrer OnClick() Veranstaltung ...

Problem:

Als ich in der "this" geben, es sagt:

setOnClickListener (Android.View.view.OnClickListener) in View cannot be applied to (com.helloandroidstudio.MainActivity) 

Ich habe keine Ahnung warum?

hier ist der Code aus der .java-Datei

import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends ActionBarActivity { 

    private Button btnClick; 
    private EditText Name, Date; 
    private TextView msg, NameOut, DateOut; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     btnClick = (Button) findViewById(R.id.button) ; 
     btnClick.setOnClickListener(this); 
     Name = (EditText) findViewById(R.id.textenter) ; 
     Date = (EditText) findViewById(R.id.editText) ; 
     msg = (TextView) findViewById(R.id.txtviewOut) ; 
     NameOut = (TextView) findViewById(R.id.txtoutName) ; 
     DateOut = (TextView) findViewById(R.id.txtOutDate) ; 
     if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()) 
        .commit(); 
     } 
    } 

    public void onClick(View v) 
    { 
     if (v == btnClick) 
     { 
      if (Name.equals("") == false && Date.equals("") == false) 
      { 
       NameOut = Name; 
       DateOut = Date; 
       msg.setVisibility(View.VISIBLE); 
      } 
      else 
      { 
       msg.setText("Please complete both fields"); 
       msg.setVisibility(View.VISIBLE); 
      } 
     } 
     return; 

    } 

Antwort

48

SetOnClickListener (Android.View.view.OnClickListener) in View kann nicht bis (com.helloandroidstudio.MainActivity) angewendet werden

Dies bedeutet mit anderen Worten (aufgrund Ihrer aktuellen Szenario), dass Ihre MainActivity müssen OnClickListener implementieren:

public class Main extends ActionBarActivity implements View.OnClickListener { 
    // do your stuff 
} 

dieses:

buttonname.setOnClickListener(this); 

bedeutet, dass Sie Hörer für Ihren Knopf „auf dieser Instanz“-> diese Instanz repräsentiert OnClickListener und aus diesem Grund Ihre Klasse zuweisen wollen, müssen diese Schnittstelle implementieren.

Es ist ähnlich mit anonymer Listener-Klasse (die Sie auch verwenden können):

buttonname.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { 

    } 
}); 
1

// wie ich es verstehe, die "das" die aktuelle Ansicht zeigt (Fokus) im Android Programm

Nein, "dies" funktioniert nur, wenn Ihr MainActivity, auf den von this verwiesen wird, den View.OnClickListener implementiert, der der Parametertyp für die setOnClickListener()-Methode ist. Es bedeutet, dass Sie View.OnClickListener in MainActivity implementieren sollten.

2

Wenn Sie einen OnClickListener (oder jeden Hörer) definieren auf diese Weise

btnClick.setOnClickListener(this); 

Sie die OnClickListener-implement brauchen in Ihrer Activity.

public class MainActivity extends ActionBarActivity implements OnClickListener{ 
2
public class MainActivity extends AppCompatActivity implements View.OnClickListener 

Jedes Mal, wenn Sie (diese) verwenden, um auf Click-Ereignisse, Ihre Haupttätigkeit hat ocClickListener zu implementieren. Android Studio erledigt das für dich, drücke alt + enter auf das Wort 'this'.

0
public class MainActivity extends Activity { 

    Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     button = (Button) findViewById(R.id.submitButton); 
     button.setOnClickListener(new MyClass()); 

    } 

    public class MyClass implements View.OnClickListener { 

     @Override 
     public void onClick(View v) { 

     } 

    } 
} 
1
package com.mani.helloworldapplication; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements View.OnClickListener { 
    //Declaration 
    TextView tvName; 
    Button btnShow; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     //Empty Window 
     super.onCreate(savedInstanceState); 
     //Load XML File 
     setContentView(R.layout.activity_main); 

     //Intilization 
     tvName = (TextView) findViewById(R.id.tvName); 
     btnShow = (Button) findViewById(R.id.btnShow); 

     btnShow.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View v) 
    { 
     String name = tvName.getText().toString(); 
     Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show(); 
    } 
} 
+1

Kannst du deiner Antwort eine Beschreibung geben? – Patrick

0

in Java-Klasse Aktivität Sie zunächst ein Verfahren benötigen würde den Blick auf den Knopf zu finden:

btnSum =(Button)findViewById(R.id.button); 

nach diesem Satz auf Klick

Zuhörer
btnSum.setOnClickListener(new View.OnClickListener() { 

und Override onClick-Methode für Ihre Funktionalität. Ich habe ein voll funktionsfähiges Beispiel hier gefunden: http://javainhouse.blogspot.in/2016/01/button-example-android-studio.html

7
package com.mani.smsdetect; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends Activity implements View.OnClickListener { 

    //Declaration Button 
    Button btnClickMe; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Intialization Button 

     btnClickMe = (Button) findViewById(R.id.btnClickMe); 

     btnClickMe.setOnClickListener(MainActivity.this); 
     //Here MainActivity.this is a Current Class Reference (context) 
    } 

    @Override 
    public void onClick(View v) { 

     //Your Logic 
    } 
} 
3
Button button= (Button)findViewById(R.id.buttonId); 
button.setOnClickListener(new View.OnClickListener(){ 
@Override 
public void onClick(View view) { 
    // click handling code 
    } 
}); 
+0

Diese Antwort ist definitiv nicht falsch, aber im Allgemeinen sind die Antworten hilfreicher (und werden wahrscheinlich höher bewertet), wenn sie eine Beschreibung von _why_ enthalten, anstatt nur _what_ zu tun, um das Problem zu beheben. Willkommen in der Gemeinschaft! –

1

Beginnen Sie Ihren OnClickListener zu handhaben, aber wenn man auf den ersten einrichten Klammer erhalten, geben neue, dann anzeigen, und Drücken Sie Enter. Sollte so aussehen, wenn Sie fertig:

Button btn1 = (Button)findViewById(R.id.button1); 

btn1.setOnClickListener(new View.OnClickListener() {    
    @Override 
    public void onClick(View v) { 
//your stuff here. 
    } 
}); 
0

Ihre ActivityView.OnClickListener implementieren müssen, wie folgt aus:

public class MainActivity extends 
Activity implements View.OnClickListener{ 
// YOUR CODE 
} 

Und innen MainActivity die Methode onClick(), wie dies außer Kraft setzen:

@override 
public void onClick (View view){ 
//here YOUR Action response to Click Button 
} 
Verwandte Themen