Android 如何在重新启动活动后检索意图的新值,而不是原始值?

Android 如何在重新启动活动后检索意图的新值,而不是原始值?,android,android-intent,onnewintent,Android,Android Intent,Onnewintent,关于这个问题已经有很多问题了,我觉得我的代码应该可以工作。 我想做的是活动A启动活动B,发送一个意图。然后,活动B启动活动A以获得结果,并应收到新的意图。下面是我的代码,根据下面文档中的引用,代码应该是有效的: “标准”和“单顶”模式仅在一个>方面不同:每当“标准”活动有新的意图时,就会创建一个新的>类实例来响应该意图。每个实例>处理单个意图。类似地,还可以创建“singleTop”activity>的新实例来处理新的意图。但是,如果目标任务>的堆栈顶部已经有一个活动的现有实例,>该实例将接收新

关于这个问题已经有很多问题了,我觉得我的代码应该可以工作。 我想做的是活动A启动活动B,发送一个意图。然后,活动B启动活动A以获得结果,并应收到新的意图。下面是我的代码,根据下面文档中的引用,代码应该是有效的:

“标准”和“单顶”模式仅在一个>方面不同:每当“标准”活动有新的意图时,就会创建一个新的>类实例来响应该意图。每个实例>处理单个意图。类似地,还可以创建“singleTop”activity>的新实例来处理新的意图。但是,如果目标任务>的堆栈顶部已经有一个活动的现有实例,>该实例将接收新的意图(在onNewIntent()调用中);未创建新的>实例

基于此,我的代码如下: 我的onNewIntent(Intent)没有被调用,我想知道我是否把它放在了正确的类中

    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);
            }
        }

    });
}

}您希望在
活动A
中从
活动B
接收结果,因此当您开始
活动B
时,请在
活动A
中使用
startActivityForResult
覆盖
活动结果
,您现在将在`onActivityResult'中接收结果意图


希望这有帮助。`

您希望在
活动A
中从
活动B
接收结果,因此当您开始
活动B
时,在
活动A
中使用
startActivityForResult
覆盖
onActivityResult
,您现在将在“onActivityResult”中收到结果意图


希望这能有所帮助。`

我以前从未遇到过这种情况,但我理解您引用的“onNewIntent()”部分必须在活动A中。活动B将像往常一样在“onActivityResult()”中获得结果。我以前从未遇到过这种情况,但我理解您引用的“onNewIntent()”部分必须在活动A中。活动B将像往常一样在“onActivityResult()”中获得结果。请阅读问题:“活动B然后为结果启动活动A”确定。您将在活动结果中收到结果。在
活动B中重写此函数
没关系,只需编辑答案;)但真正的问题是OP想要使用“Activity.onNewIntent()”并且想知道该方法放在哪里?设置intent
标志\u Activity\u重新排序\u FRONT
当启动
活动B
时,您将在
活动B
onNewIntent
中收到intent,然而,我尝试了这个mutansar,它仍然不起作用,请阅读问题:“活动B然后启动活动A以获得结果”确定。您将在活动结果中收到结果。在
活动B中重写此函数
没关系,只需编辑答案;)但真正的问题是OP想要使用“Activity.onNewIntent()”并且想知道该方法放在哪里?将intent
标记\u Activity\u重新排序\u到前面
当启动
活动B
时,您将在
活动B
onNewIntent
中收到intent,但是,它仍然不起作用
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);
        }
    }
}