Есть много вопросов об этом уже, и я чувствую, что мой код должен работать. То, что я пытаюсь сделать, - это действие А начинает действие Б, отправляя намерение. Затем действие 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);
}
}
}
}
никогда я не имел такой сценарий раньше, но я понимаю, часть, которую вы цитируемая как«onNewIntent()»должен быть в активности A. активность B будет получить приводит к «onActivityResult()», как обычно. – 0X0nosugar