Android SDK如何实现OnClickListener

Android SDK how to OnClickListener

伙计们,我需要有关此代码的帮助:

    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();
        }
    }
};

所以我想做的是当我点击 btnGetLocation 时,这段代码应该可以工作,但是当我启动 activity 时代码会自动工作所以我怎样才能让我只在我点击按钮时工作?

我希望你们理解这个问题,我是新 Android 开发人员,所以我还在学习中 请原谅我的愚蠢问题。

谢谢

*** 更新:

这是完整的代码:

 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();
}

}

那是因为您还没有将您写入的 View.onClickListener 对象关联到任何对象。因此,当 activity 启动时,将执行侦听器的代码。当您希望特定视图说 'A' 响应点击时,您可以将 View.onClickListener 关联到它。所以在你的情况下添加以下内容。

yourbutton.setOnClickListener(btnGetLastLocationOnClickListener)

确保您已将 yourbutton 绑定到 Button 视图。

您可以使用以下代码完成它

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();
          }
     }
}

请注意,您可以在 onCreate() 方法中添加此代码以使其工作

试试这个:

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();
              }
         }

如果仍然无法正常工作,请像这样编写您的代码:

您的 activity 必须实现 OnClickListener 和

btnGetLocation.setOnClickListener(this)

您将拥有这样的 onClick

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();
                  }
             }