2013-08-16 2 views
7

Я написал FragmentActivity с некоторыми вкладками. когда я вызываю дополнительное действие (которое я использую для настройки пользовательских настроек) с помощью startActivityForResult (без различий, если он находится в FragmentActivity или в ListFragment), метод onActivityResult вызывается, когда я запускаю эту активность предпочтений, но не тогда, когда я заканчиваю ее, так как я бы ожидал этого (опять же никаких различий, если он находится в FragmentActivity или в ListFragment). после того как я закончу операцию предпочтения, этот метод вообще не вызван.onActivityResult вызывается при запуске Activity, а не при его завершении

моя проблема в том, что я хочу обновить текущую вкладку (и установить последний использованный идентификатор вкладки) после того, как я закончил активность предпочтений, и я надеялся, что смогу сделать это в методе onActivityResult.

это класс создает преференции деятельности:

public abstract class ListFragmentBase<I> extends ListFragment implements 
LoaderCallbacks<List<I>> { 

это метод пересылки меня привилегированной активности внутри этого класса:

protected void forwardToPreferences(int currentTab){    
     Intent intent = new Intent(getActivity(), GlobalPreferencesActivity.class); 
     getActivity().startActivityForResult(intent, 10); 
} 

это метод, который вызывается после того, как вызвав метод выше, но не после того, как я закончил вызываемую деятельность

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
} 

это предпочтение-активность:

public class GlobalPreferencesActivity extends Activity { 

и внутри этого класса вы видите, как я называю метод отделки:

TextView confirmSettings = (TextView) view.findViewById(R.id.confirm_settings); 
confirmSettings.setTextSize(PreferenceHelper.getSizeHeader(getApplicationContext())); 
    confirmSettings.findViewById(R.id.confirm_settings).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) {  
      if(BaseFragmentActivity.lastActivity != null){ 
       BaseFragmentActivity.lastActivity.onRefreshData(); 
     } 
      ComponentName callingActivity = getCallingActivity(); 
      GlobalPreferencesActivity.this.finish(); 
     } 
    }); 
+0

Почтовый индекс и вывод логарифма. – Squonk

+1

Я мог бы исправить свою особую проблему, добавив android: launchMode = «standard» в AndroidManifest.xml для активности предпочтений (раньше это было - как ListFragements - установлено значение «singleInstance»). но поведение startActivityForResult по-прежнему очень странно для меня. – richard

+0

Извините, его первый раз, когда я добавляю код, мне потребовалось некоторое время. и теперь я должен найти из формата для правильного ввода logcat и добавить его. – richard

ответ

3

Это ошибка Андроида

onActivityResult() called prematurely

и

Why does result from startActivityForResult come before activity really starts?

Я не знаю, какую версию вы используете, и если она была решена/исправлено

+0

спасибо, я проверю если это поможет мне, но это определенно та же проблема. извините за мои неопытные вопросы, касающиеся обработки stackoverflow, но я должен отметить мой вопрос как дубликат сейчас (если да: как)? – richard

+0

@ Richard проблем нет, не беспокойтесь. По крайней мере, вы обнаружили, что вы не одиноки с такой же проблемой ;-). Если вы думаете, что я ответил, вы можете подтвердить свой ответ, чтобы другие знали, что на проблему ответили. – HpTerm

7

Пожалуйста, убедитесь, что ваше призвание деятельности не является SingleInstance в AndroidManifest файле. Убедитесь, что оно одноточечное или стандартное.

Надеется, что это будет работать для вас, ребят, а

+0

Аллилуйя, работал! Nasty bug, появляется в моем проекте на Android 4.3 с использованием камеры для достижения целевого результата. – Pelanes

+0

У меня был режим singleTask как режим запуска. Он работает, если удален – Libin

+0

Что делать, если рассматриваемая деятельность является системой «Настройки»? – TheRealChx101

0

onActivityResult, окликнул OnStart,

Основной причина того, что, когда ваш переход от вашей активности на другой виде деятельность, не вызывая закончить. Затем последняя активность прошла в состоянии onStop.

После того, как onStop, вызывается метод onstart, затем onActivityResult.

Смежные вопросы