Java AndroidSDK如何创建侦听器
伙计们,我需要这些代码的帮助:Java AndroidSDK如何创建侦听器,java,android,sdk,Java,Android,Sdk,伙计们,我需要这些代码的帮助: public View.OnClickListener btnGetLastLocationOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (mGoogleApiClient != null) { if (mGoogleApiClient.isConnected()
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时,这段代码应该可以工作,但是当我开始活动时,代码会自动工作,所以我如何才能使其仅在我点击按钮时工作
我希望你们理解这个问题,我是新的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();
}
}这是因为您尚未将已写入的
视图.onClickListener
对象关联到任何对象。因此,当活动启动时,监听器的代码将被执行。当您希望某个特定视图对单击做出响应时,可以将视图.onClickListener
与之关联。因此,在您的情况下,添加以下内容
yourbutton.setOnClickListener(btnGetLastLocationOnClickListener)
确保已将
按钮
绑定到按钮
视图。您可以使用以下代码完成此操作
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();
}
}
如果仍然无法工作,请按以下方式编写代码:
您的活动必须实现OnClickListener和
btnGetLocation.setOnClickListener(this)
你会有这样的一个吻
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();
}
}
请发布您的完整课程代码。100%有效谢谢,现在按钮有效,但当我开始活动时,仍然会自动获取值并将其放入文本框,而且当我单击按钮时,它也会执行相同的操作,因此我只希望按钮获得值,如果你能帮忙,我会非常高兴的。@not_reach_stackoverflow的答案对我来说很有用,但当我开始活动时,它会自动获取值并将其放入文本框,当我单击按钮时,它也会执行相同的操作,所以我只希望按钮获取值,如果你能帮忙,我会非常高兴的。请我已经更新了主要问题,请检查一下好吗?谢谢,伙计,但我仍然有同样的问题,那就是一旦我开始活动就加载值,如果你能帮忙,我会非常感谢。你有没有使用这个提示:btnGetLocation.setOnClickListener(这个)?是的,但我在(此)下面画了红线,只是为了清除此代码btnGetLocation。setOnClickListener(此)应位于此void protected void onCreate(Bundle savedinstancestate)中,因为您没有在活动中的
OnClickListener
接口上实现,所以您将转到红线。