0

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

мой метод onActivityResult() не вызывает мою активность;

TransactionFormActivity начинает новую деятельность под названием VehicleSearchActivity, который имеет customListAdapter.when я нажимаю на элемент в этом адаптере я хочу передать значение обратно в TransactionFormActivity.

здесь код из моих двух видов деятельности:

код в пользовательском списке Адаптер onClick()

convertView.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent i = new Intent(context, TransactionFormActivity.class); 
     i.putExtra("VehicleId", rowItem.VehicleId); 
     i.putExtra("VehicleReg", rowItem.Registration); 
     context.startActivityForResult(i,0);   
     context.finish(); 
    } 
} 

и вот код в TransactionFormActivity

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      vehicleId = data.getIntExtra("VehicleId", 0); 
      vehicleReg.setText(data.getStringExtra("VehcilceReg")); 
     } 
    } 
} 

Когда я отладки и поставить точки останова, мой код в onClickListener запускается. Однако приложение возвращается в TransactionFormActivty, и метод OnActivityResult() никогда не вызывается?

Что я могу делать неправильно.

+0

ли вы начать '' TransactionFormActivity' с startActivityForResult() ', и вы ожидаете обратного вызова' onActivityResult() 'от TransactionFormActivity будет называться? – Luksprog

+0

Да, это мое понимание того, как оно должно работать, что я читаю. Я ошибаюсь? Все, что я хочу сделать, это передать значение обратно в действие, которое вызвало меня. – Zapnologica

+0

'onActivityResult' - это метод, с помощью которого вы можете получить результат деятельности, которую вы начали с метода startActivityForResult. Проверь это; http://developer.android.com/training/basics/intents/result.html – iamkaan

ответ

3

Вы делаете это немного неправильно ..

В вашем FirstActivity вы должны вызвать:

//your code... 
Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 1); 

В вашем SecondActivity вы следует позвонить:

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result",result); 
setResult(RESULT_OK,returnIntent); 
finish(); 

, а затем обратно в FirstActivity вы используете onActivityResult, чтобы получить данные обратно

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 
     if(resultCode == RESULT_OK){ 
      String result=data.getStringExtra("result"); 
     } 
     if (resultCode == RESULT_CANCELED) { 
      //Write your code if there's no result 
     } 
    } 
} 
+0

AAH, Это имеет смысл сейчас, и он работает, (Бонус). Большое вам спасибо за то, что вы просто повернули меня в правильном направлении. – Zapnologica

+0

Мое удовольствие .. Счастливое кодирование! :-) – gilonm

3

Как я не репутацию на комментарий, так что просто хочу, чтобы убедиться, что у вас нет

android:launchMode="singleInstance" 

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

+0

У меня его нет в файле манифеста. Однако в этом случае я хочу, чтобы он был одним и тем же экземпляром. Я заполняю форму в транзакции. Я выполняю поиск предмета, и, щелкнув по этому элементу, он должен вернуться к транзакции с выбранным идентификатором автомобиля. – Zapnologica

2

Вы должны переопределить onActivityResult в вызывающей активности не TransactionFormActivity