2016-01-13 4 views
1

Есть много вопросов об этом уже, и я чувствую, что мой код должен работать. То, что я пытаюсь сделать, - это действие А начинает действие Б, отправляя намерение. Затем действие B запускает действие A для результата, и необходимо получить новое намерение. Мой код ниже, и в соответствии с цитаты из приведенной ниже документации, код должен работать:Как получить новое значение намерения после перезапуска действия, а не оригинала?

«стандарт» и режимы «SingleTop» отличаются друг от друга только в одном> относительно: Каждый раз, когда есть новый намерение для «стандартного» действия, создается новый экземпляр класса для реагирования на это намерение. Каждый экземпляр> обрабатывает одно намерение. Точно так же может быть создан новый экземпляр действия «singleTop»> для обработки нового намерения. Однако, если целевая задача> уже имеет существующий экземпляр действия в верхней части своего стека,> этот экземпляр получит новое намерение (в вызове onNewIntent()); новый> экземпляр не создается.

Так на основе этого, мой код выглядит следующим образом: P.S Мой onNewIntent (Intent) не имеет дозвонились, Im интересно, если я положил его в нужном классе.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_drink_sale_list); 

    mListView = (ListView) findViewById(R.id.list); 
    mDrinksAdapter = new drinksAdapter(getApplicationContext(), drinks, drinkPics); 
    mListView.setAdapter(mDrinksAdapter); 

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    //If the bn!= null, this means that this activity was started by Activity B via startActivityForResult() 

      Bundle bn = getIntent().getExtras(); 
      if(bn != null){ 

        Intent intent = new Intent(); 
        Bundle bundle = new Bundle(); 
        bundle.putSerializable("anotherDrinkObject", drinks.get(position)); 
        intent.putExtras(bundle); 
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
        setResult(RESULT_OK, intent); 

        finish(); 

      } 
      else { 

       Intent intent = new Intent(drinkSaleList.this, SaleActivity.class); 
       Bundle bundle = new Bundle(); 
       bundle.putSerializable("DrinkObject", drinks.get(position)); 
       intent.putExtras(bundle); 

       startActivity(intent); 
      } 
     } 

    }); 
} 

}

активность B

public class SaleActivity extends AppCompatActivity { 

private ListView mListView; 
private drinksAdapter mDrinksAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_sale); 
    setContentView(R.layout.activity_sale); 
    Bundle bundle = getIntent().getExtras(); 
    Drink drink = (Drink) bundle.getSerializable("DrinkObject"); 

    mListView = (ListView) findViewById(R.id.saleList); 
    mDrinksAdapter = new drinksAdapter(getApplicationContext(), drink); 
    mListView.setAdapter(mDrinksAdapter); 

    Button addDrink = (Button) findViewById(R.id.addAnotherDrink); 

    addDrink.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(SaleActivity.this, drinkSaleList.class); 
      intent.removeExtra("DrinkObject"); 
      intent.putExtra("anotherDrink", true); 
      startActivityForResult(intent, 1); 

     } 
    }); 

} 
@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    setIntent(intent);//must store the new intent unless getIntent() will return the old one 


} 




public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1) { 
     if (resultCode == RESULT_OK) { 


      Bundle bn = getIntent().getExtras(); 

      Drink drink = (Drink) bn.getSerializable("anotherDrinkObject"); 

      mDrinksAdapter.add(drink); 
     } 
    } 
} 

}

+0

никогда я не имел такой сценарий раньше, но я понимаю, часть, которую вы цитируемая как«onNewIntent()»должен быть в активности A. активность B будет получить приводит к «onActivityResult()», как обычно. – 0X0nosugar

ответ

0

Вы хотите получить результат от Activity B в Activity A так, когда вы начинаете Activity B, используйте startActivityForResult и overrideonActivityResult в Activity A и теперь вы получите результат нт намерение в `onActivityResult

Надеется, что это helps.`

+0

, пожалуйста, прочитайте вопрос: «Затем действие B начинает действие A для результата» – 0X0nosugar

+0

Ok. Вы получите результат в 'onActivityResult'. переопределите эту функцию в «Activity B» –

+0

, все в порядке, просто отредактируйте ответ;) Но реальная проблема в том, что OP хочет использовать «Activity.onNewIntent()» и задается вопрос, где разместить метод? – 0X0nosugar

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

  • Нет связанных вопросов^_^