else{ //this is part of some onclick listener of a button in the program
slider.close();
mapView.setClickable(false);
Toast.makeText(getBaseContext(), "GPS cannot retrieve your location. GPS needs clear sky or service is off. Please turn on GPS service.", Toast.LENGTH_LONG).show();
final Button bt = (Button)findViewById(R.id.turnGPS);
bt.setVisibility(View.VISIBLE);
bt.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
Intent activateGps = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
//Map.this.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
Map.this.startActivityForResult(activateGps, RESULT_OK);
//bt.setVisibility(View.INVISIBLE);
return false;
}
});
}
}
我想启动新意图,以便用户可以启用GPS(如果之前没有激活GPS)。我使用了startActivityForResult方法,它可以响应Activity是否成功。成功时,它必须对用户界面进行一些更改....我尝试并启用了GPS,但仍然没有对UI进行任何更改(例如:按钮不会隐藏)。我做错了什么?
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==RESULT_OK)
{
if(resultCode == RESULT_OK && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
Button bt = (Button)findViewById(R.id.turnGPS);
bt.setVisibility(View.INVISIBLE);
this.finish();
}
else if(resultCode == RESULT_CANCELED)
{
Toast.makeText(getBaseContext(), "No GPS device or service enabled", Toast.LENGTH_LONG+Toast.LENGTH_LONG).show();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
这是我的onActivityResult方法。 this.finish();启用时完成当前活动,因此启动OnResume()?
答案 0 :(得分:2)
将PreferenceActivity
与startActivityForResult()
一起使用时存在一些限制(其中一种讨论见onActivityResult() called prematurely)。
我的建议是:按PreferenceActivity
而不是startActivity()
开始startActivityForResult()
,然后将您需要重新阅读首选项的代码放入onStart()
或onResume()
方法,当活动位于堆栈顶部时,将立即调用。
答案 1 :(得分:0)
Android中存在一个错误...更改您的
android:launchMode="singleInstance(or singleTasc)"
到
android:launchMode="singleTop"
在调用startActivityForResult()
方法的Activity中再次运行。它仍然有效。
答案 2 :(得分:0)
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:alwaysRetainTaskState="True"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>