2016-07-15 7 views
1

Jungs OnClickListener ich mit diesem Code Hilfe benötigen:Android SDK, wie

public View.OnClickListener btnGetLastLocationOnClickListener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     if (mGoogleApiClient != null) { 
      if (mGoogleApiClient.isConnected()) { 
       getMyLocation(); 
      } else { 
       Toast.makeText(AddEditActivity.this, 
         "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show(); 
      } 
     } else { 
      Toast.makeText(AddEditActivity.this, 
        "mGoogleApiClient == null", Toast.LENGTH_LONG).show(); 
     } 
    } 
}; 

so, was ich tun möchte, ist, wenn ich auf btnGetLocation klicken sollte dieser Code arbeiten, sondern der Code funktioniert automatisch, wenn ich den Start Aktivität so wie kann ich nur arbeiten, wenn ich auf den Knopf klicke?

Ich hoffe, ihr versteht das Problem, ich bin neuer Android-Entwickler, also lerne ich immer noch, verzeih mir meine dumme Frage.

danke

*** Update:

hier ist der gesamte Code:

TextView txtmylink; 
GoogleApiClient mGoogleApiClient; 
Location mLastLocation; 
Button getlastlocation; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    txtmylink = (TextView) findViewById(R.id.mylink); 
    getlastlocation = (Button) findViewById(R.id.getlastlocation); 
    getlastlocation.setOnClickListener(getlastlocationOnClickListener); 

    // Create an instance of GoogleAPIClient. 
    if (mGoogleApiClient == null) { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
    } 
} 

View.OnClickListener getlastlocationOnClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (mGoogleApiClient != null) { 
      if (mGoogleApiClient.isConnected()) { 
       getMyLocation(); 
      } else { 
       Toast.makeText(MainActivity.this, 
         "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show(); 
      } 
     } else { 
      Toast.makeText(MainActivity.this, 
        "mGoogleApiClient == null", Toast.LENGTH_LONG).show(); 
     } 
    } 
}; 

private void getMyLocation() { 
    try { 
     /* code should explicitly check to see if permission is available 
     (with 'checkPermission') or explicitly handle a potential 'SecurityException' 
     */ 
     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     if (mLastLocation != null) { 
      txtmylink.setText(String.valueOf("http://maps.google.com/maps?q=") + 
        String.valueOf(mLastLocation.getLatitude()) + 
        String.valueOf(",")+ String.valueOf(mLastLocation.getLongitude())); 

     } else { 
      Toast.makeText(MainActivity.this, 
        "mLastLocation == null", 
        Toast.LENGTH_LONG).show(); 
     } 
    } catch (SecurityException e) { 
     Toast.makeText(MainActivity.this, 
       "SecurityException:\n" + e.toString(), 
       Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
protected void onStart() { 
    mGoogleApiClient.connect(); 
    super.onStart(); 
} 

@Override 
protected void onStop() { 
    mGoogleApiClient.disconnect(); 
    super.onStop(); 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) { 
    getMyLocation(); 
} 

@Override 
public void onConnectionSuspended(int i) { 
    Toast.makeText(MainActivity.this, 
      "onConnectionSuspended: " + String.valueOf(i), 
      Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    Toast.makeText(MainActivity.this, 
      "onConnectionFailed: \n" + connectionResult.toString(), 
      Toast.LENGTH_LONG).show(); 
} 

}

+1

Bitte senden Sie Ihre vollständigen Klassencode haben. – Rashin

Antwort

1

versuchen Sie dies:

public void onClick(View v) { 
      if (view.getId() == R.id.btnGetLocation) 
      if (mGoogleApiClient != null) { 
       if (mGoogleApiClient.isConnected()) { 
        getMyLocation(); 
       } else { 
        Toast.makeText(AddEditActivity.this, 
         "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show(); 
       } 
       } else { 
        Toast.makeText(AddEditActivity.this, 
         "mGoogleApiClient == null", Toast.LENGTH_LONG).show(); 
       } 
     } 

Wenn noch funktioniert nicht schreiben Sie Ihren Code wie folgt:

Ihre Aktivität mu st implementieren OnClickListener und

btnGetLocation.setOnClickListener(this) 

und Sie erhalten die onClick wie diese

public void onClick(View v) { 
       if (view.getId() == R.id.btnGetLocation) 
       if (mGoogleApiClient != null) { 
        if (mGoogleApiClient.isConnected()) { 
         getMyLocation(); 
        } else { 
         Toast.makeText(AddEditActivity.this, 
          "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show(); 
        } 
        } else { 
         Toast.makeText(AddEditActivity.this, 
          "mGoogleApiClient == null", Toast.LENGTH_LONG).show(); 
        } 
      } 
+1

danke Mann, aber immer noch habe ich das gleiche Problem, das ist der Wert geladen werden, sobald ich die Aktivität starten, wenn Sie bitte helfen kann, werde ich dankbar dafür sein. –

+0

haben Sie diese Hinweise: btnGetLocation.setOnClickListener (this) ...? – aurelianr

+0

ja, aber ich habe rote Linie unter (dies), nur um diesen Code klar zu sein btnGetLocation.setOnClickListener (this) sollte in diesem void sein protected void onCreate (Bundle savedInstanceState –

2

Das ist, weil Sie nicht die View.onClickListener-Objekt zugeordnet haben, Sie haben bis jetzt geschrieben. Wenn die Aktivität gestartet wird, wird der Code des Hörers ausgeführt. Wenn Sie eine bestimmte Ansicht wünschen, sagen Sie "A", um auf einen Klick zu reagieren, ordnen Sie ihm einen View.onClickListener zu. Also fügen Sie in Ihrem Fall Folgendes hinzu.

yourbutton.setOnClickListener(btnGetLastLocationOnClickListener) 

Stellen Sie sicher, dass die yourbutton an die Button Ansicht gebunden haben.

+0

hat 100% dank mann gearbeitet, jetzt funktioniert der knopf, aber immer noch wenn ich die aktivität starte bekomme automatisch den wert und lege es in den textkasten und auch wenn ich auf den button klicke tut es dasselbe, also will ich nur den button drücken bekomme den Wert, ich werde mehr als glücklich sein wenn du mir bitte helfen könntest. –

0

Sie können es erreichen mit dem folgenden Code

btnGetLocation = (Button) findViewById(R.id.btnGetLocation); // or whatever you called the button 
btnGetLocation.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (mGoogleApiClient != null) { 
      if (mGoogleApiClient.isConnected()) { 
       getMyLocation(); 
      } else { 
       Toast.makeText(AddEditActivity.this, 
        "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show(); 
      } 
      } else { 
       Toast.makeText(AddEditActivity.this, 
        "mGoogleApiClient == null", Toast.LENGTH_LONG).show(); 
      } 
    } 
} 

Beachten Sie, dass Sie diesen Code in der Methode onCreate() hinzufügen können, um es

funktioniert
+0

hat es nicht funktioniert, aber danke Mann. –

+0

@ rooot_999 Bitte übergeben Sie den Code, den Sie haben –

+0

die Antwort von @not_again_stackoverflow ist für mich gearbeitet, aber immer noch, wenn ich die Aktivität automatisch starten den Wert und legte es in das Textfeld und auch wenn ich auf die Schaltfläche klicken Sie tun das gleiche, so Ich will nur den Knopf, um den Wert zu erhalten, ich werde mehr als glücklich sein, wenn Sie bitte helfen konnten –