【问题标题】:onActivityResult for an Intent意图的 onActivityResult
【发布时间】:2011-04-22 00:35:48
【问题描述】:
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()?

【问题讨论】:

    标签: android android-activity maps


    【解决方案1】:

    在使用PreferenceActivitystartActivityForResult() 时有一些限制(其中一种讨论请参见onActivityResult() called prematurely)。

    我的建议是:用startActivity()而不是startActivityForResult()开始PreferenceActivity,然后将需要重新读取首选项的代码放入onStart()onResume()方法中,当Activity在栈顶时会立即调用。

    【讨论】:

      【解决方案2】:
          <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>
      

      【讨论】:

      • 请考虑在答案中添加解释。
      【解决方案3】:

      Android 中存在错误...更改您的

      android:launchMode="singleInstance(or singleTasc)"
      

      android:launchMode="singleTop"
      

      在调用startActivityForResult() 方法并再次运行的活动中。它仍然可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-20
        • 1970-01-01
        相关资源
        最近更新 更多