2016-07-07 5 views
0

Этот вопрос поднят на несколько потоков, но их решения не работают для меня.Android onActivityResult не называется

Это мой файл манифеста

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.intent" 
     android:versionCode="1" 
     android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="8" 
      android:targetSdkVersion="23"/> 
<application android:icon="@drawable/icon" 
      android:label="@string/app_name" 
      android:allowBackup="false"> 
    <activity android:name=".Start"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Second"/> 
</application> 
</manifest> 

Это мой Launch Class

package com.example.intent; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Start extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Toast.makeText(this, "First Intent", Toast.LENGTH_LONG).show(); 
    Intent intent = new Intent(this, Second.class); 
    startActivityForResult(intent, RESULT_OK); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Toast.makeText(this, "After Intent", Toast.LENGTH_LONG).show(); 
} 
} 

Это мой второй класс

package com.example.intent; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Second extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Toast.makeText(this, "Second Intent", Toast.LENGTH_LONG).show(); 
} 
} 

Теперь в соответствии с кодом, функция onActivityResult в Start класс следует вызывать, когда я нажимаю кнопку «Назад» во втором классе «Активность», но не в так как я не могу видеть тосты, заявляющие После намерения.

Пожалуйста, исправьте меня и предоставьте решение для этого. Благодарю.

+0

попробовать положить SetResult (RESULT_OK); в вашем втором действии –

ответ

1

замените RESULT_OK на startActivityForResult (намерение, RESULT_OK); с некоторой пользовательской константой, положительным числом. RESULT_OK is -1

+0

Спасибо. Это решение работает для меня. Даже не нужно иметь setResult во втором классе. Хотя, если вы можете объяснить, почему RESULT_OK не работает, хотя кажется, что он соответствует логической цепочке. Еще раз спасибо –

+0

, что он не работает, потому что его отрицательное число, что, очевидно, не принято :) В любом случае это будет неправильной константой, так как в onActivityResult вы бы сравнивали как requestCode, так и resultCode с RESULT_OK, что было бы довольно запутанным. – tibbi

0

Метод onActivityResult не вызывается, потому что вы должны установить код возврата в своем втором классе.

The Official Documentation говорит:

Когда выходит деятельность, она может вызывать setResult (целое), чтобы вернуть данные обратно своему родителю. Он должен всегда предоставлять код результата, который может быть стандартными результатами RESULT_CANCELED, RESULT_OK или любыми пользовательскими значениями , начинающимися с RESULT_FIRST_USER.

Чтобы установить код результата, используйте метод setResult, прежде чем деятельность будет закрыта.

Добавьте следующую строку в ваш второй класс:

setResult(RESULT_OK) 

Например, вы можете переопределить метод onBackPressed и положить setResult там, как это:

@Override 
public void onBackPressed() 
{ 
    setResult(RESULT_OK) 
    super.onBackPressed(); 
} 
+0

Это решение не работает для меня. Хотя решение @tibbi работает для меня, не устанавливая setResult во втором классе. Спасибо за ваше рассмотрение этой проблемы. –