onActivityResult для намерения - PullRequest
0 голосов
/ 22 апреля 2011
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, но все еще нет изменений в пользовательском интерфейсе (например: кнопка не скрывает).Что я делаю не так?

@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 ()?

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011

Существуют некоторые ограничения при использовании PreferenceActivity с startActivityForResult() (одно из обсуждений такого рода см. В onActivityResult (), вызываемом преждевременно ).

Мое предложение: начните PreferenceActivity с startActivity() вместо startActivityForResult(), а затем поместите код, который необходимо перечитать, в onStart() или onResume() методе, который будет вызван немедленно, поскольку Activity находится на вершине стека.

0 голосов
/ 19 мая 2014
    <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>
0 голосов
/ 19 мая 2014

В Android есть ошибка ... Измените

android:launchMode="singleInstance(or singleTasc)"

на

android:launchMode="singleTop"

в своей деятельности, которая вызывает метод startActivityForResult(), и снова запустите.Это все еще будет работать.

...