2017-01-25 7 views
2

я столкнулся странным вопросом при возвращении к деятельности с результатом, я пропусканием Intent для startActivityForResult от адаптера, как это:onActivityResult Намерения нуля при переходе Intent от адаптера

Intent i = new Intent(activity, EditInfoActivity.class); 
i.putExtra("id", list.get(position).getID()); 
activity.startActivityForResult(i, 100); 

и в секунде активность, то есть в EditInfoActivity в моем случае на Button клик Я заходящего результат для первого действия, как это:

Intent i = getIntent(); 
i.putExtra("isDataChange", isDataChange); 
setResult(100, i); 
finish(); 

onActivityResult в методе Activity, я могу получить код результата, но получить Intentnull.

Почему? кто-нибудь есть идеи по этому, пожалуйста, поделитесь.

в деятельности:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 100) { 
    //Here data is null and app crash 
    if (data.getExtras() != null && data.getBooleanExtra("isDataChange", false)) { 
     recreate(); 
    } 
    } 
} 

ответ

2

Во-первых, вам нужно, чтобы начать активность с REQUEST_CODE:

// Here we set a constant for the code. 
private final int REQUEST_CODE = 100; 

Intent i = new Intent(activity, EditInfoActivity.class); 
i.putExtra("id", list.get(position).getID()); 
activity.startActivityForResult(i, REQUEST_CODE); 

Затем вам нужно отправить RESULT_OK завершая EditInfoActivity :

Intent i = getIntent(); 
i.putExtra("isDataChange", isDataChange); 
setResult(RESULT_OK, i); 
finish(); 

Затем обрабатывать результат на первом занятии с этим:

Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // REQUEST_CODE is defined as 100 
    if (resultCode == RESULT_OK && requestCode == 100) { 
    // do process 
    } 
} 
+0

Спасибо, что работает –

+0

@KapilRajput: добро пожаловать;) –

2

setResult БЕРЕТ RESULT_CODE вместо REQUEST_CODE.

Замените ваш код на это, возможно, он решит вашу проблему.

setResult(RESULT_OK, i); 

И Yout onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
    //Here data is null and app crash 
     if (data != null && data.getBooleanExtra("isDataChange", false)) { 
      recreate(); 
     } 
    } 
} 
2

Две ошибки. Вы передаете намерение, которое использовалось для запуска вашей деятельности. Вместо этого используйте new Intent().

При настройке результата деятельности вы должны использовать результирующие коды, а не код запроса setResult(RESULT_OK), альтернативно RESULT_CANCELED и обрабатывать ответ соответствующим образом.