Ich habe also etwas recherchiert und nachdem Sie den Button als Objekt durch den Code definiert haben
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 dein OnClick()
event ...
Problem:
Wenn ich das "this" eingebe, heißt es:
setOnClickListener (Android.View.view.OnClickListener) in View cannot be applied to (com.helloandroidstudio.MainActivity)
Ich habe keine Idee 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;
}
SetOnClickListener (Android.View.view.OnClickListener) in View kann nicht angewendet werden auf (com.helloandroidstudio.MainActivity)
Dies bedeutet mit anderen Worten (aufgrund Ihres aktuellen Szenarios), dass Ihre MainActivity OnClickListener implementieren muss:
public class Main extends ActionBarActivity implements View.OnClickListener {
// do your stuff
}
Diese:
buttonname.setOnClickListener(this);
bedeutet, dass Sie Listener für Ihren Button "in dieser Instanz"->
zuweisen möchten. Diese Instanz stellt OnClickListener dar. Aus diesem Grund muss Ihre Klasse diese Schnittstelle implementieren.
Ähnlich ist es mit der anonymen Listener-Klasse (die Sie auch verwenden können):
buttonname.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
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
}
}
Button button= (Button)findViewById(R.id.buttonId);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
// click handling code
}
});
public class MainActivity extends AppCompatActivity implements View.OnClickListener
Wann immer Sie (dies) für Klickereignisse verwenden, muss Ihre Hauptaktivität ocClickListener implementieren. Android Studio erledigt das für Sie, drücken Sie Alt und geben Sie das Wort 'this' ein.
Wenn Sie auf diese Weise eine OnClickListener
(oder einen beliebigen Listener) definieren
btnClick.setOnClickListener(this);
sie müssen implement
die OnClickListener
in Ihrer Activity
public class MainActivity extends ActionBarActivity implements OnClickListener{
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();
}
}
Starten Sie Ihren OnClickListener. Wenn Sie jedoch die erste Klammer einrichten, geben Sie new, dann View ein und drücken Sie die Eingabetaste. Sollte so aussehen, wenn Sie fertig sind:
Button btn1 = (Button)findViewById(R.id.button1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//your stuff here.
}
});
// Soweit ich es verstehe, bezeichnet das "dies" die aktuelle Ansicht (Fokus) im Android-Programm
Nein, "this" funktioniert nur, wenn Ihre MainActivity
, auf die this
verweist, den View.OnClickListener
implementiert. Hierbei handelt es sich um den Parametertyp für die setOnClickListener()
-Methode. Das bedeutet, dass Sie View.OnClickListener
in MainActivity
implementieren sollten.
Ihre Activity
muss View.OnClickListener
wie folgt implementieren:
public class MainActivity extends
Activity implements View.OnClickListener{
// YOUR CODE
}
Und innerhalb von MainActivity
überschreiben Sie die Methode onClick()
wie folgt:
@override
public void onClick (View view){
//here YOUR Action response to Click Button
}
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) {
}
}
}
in der Aktivität Java-Klasse benötigen Sie zuerst eine Methode, um die Ansicht der Schaltfläche als zu finden:
btnSum =(Button)findViewById(R.id.button);
danach auf "Listener" klicken
btnSum.setOnClickListener(new View.OnClickListener() {
und überschreiben Sie die onClick-Methode für Ihre Funktionalität. Ich habe hier ein voll funktionierendes Beispiel gefunden: http://javainhouse.blogspot.in/2016/01/button-example-Android-studio.html