Java 使一个本身已启动的活动返回到上一屏幕;onBackPressed();

Java 使一个本身已启动的活动返回到上一屏幕;onBackPressed();,java,android,android-intent,android-activity,parameters,Java,Android,Android Intent,Android Activity,Parameters,我有一个活动,用这段代码重复“x”次: //create intent to start itself again with different parameters Intent intent = getIntent(); intent.putExtra(CATEGORY_ID, temp.getCat_ID()); intent.putExtra(CATEGORY_SHOPID, temp.getShopID());

我有一个活动,用这段代码重复“x”次:

//create intent to start itself again with different parameters
            Intent intent = getIntent();

            intent.putExtra(CATEGORY_ID, temp.getCat_ID());
            intent.putExtra(CATEGORY_SHOPID, temp.getShopID());
            intent.putExtra(CATEGORY_SITEID, temp.getSiteID());
            intent.putExtra(CATEGORY_NAME, temp.getCat_Name());

            finish();
            startActivity(intent);

我的目标是,当用户按下“后退”按钮时,相同的活动会像以前一样开始,参数与以前相同,诸如此类。我尝试将它们保存在活动数组列表中,但似乎不起作用。

如果您保存先前设置的参数,也可以,但您需要从
Intent
本身检索所有信息,并用适当的数据重新填充活动

必须这样做:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String categoryId = getIntent().getStringExtra(CATEGORY_ID);

    // retrieve the others and populate your activity 

}

当您调用finish时,您的活动将结束。 当您不调用finish时,您的活动就转到后台。在这种情况下,当您在新活动中按Back按钮时,将显示以前的活动


我认为当您删除finish()时,它会起作用。

在您的活动中,将事件取回

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK ) {
        // and you have to make a intent to call this activity again with parameter other
        finish(); // and call finish() here to close the old activity
    }
    return super.onKeyDown(keyCode, event);
}

希望这有帮助

您是否尝试重写onBackPressed方法?

它似乎没有传递参数或检索参数。我将添加我的getIds()方法来显示,但是,重复“x”次到底是什么意思?编译时不知道有多少活动在这种情况下,删除finish()将起作用,按back键时将收到最后一个活动。我告诉你保持完成,你会退出你的应用程序,一旦你按下后退。我一直在努力尝试各种奇怪的方法,但这似乎做到了。谢谢,向上投票我的问题,我将接受向上投票你的回答有没有办法使用应用程序的savedInstanceState来记住该活动特定指令的值?没有,像这样的源代码,在你的活动@Override public boolean onKeyDown(int keyCode,KeyEvent event){if(keyCode==KeyEvent.keyCode\u BACK){//并且您必须使用参数other finish();//再次调用此活动,并在此处调用finish()以关闭旧活动}返回super.onKeyDown(keyCode,event);}
是的,我有,但我想回到同一活动的前一个版本,而不必再次加载和/或发出HTTP请求。您想使用同一活动的具体原因是什么?是的。我的应用程序从SOAP服务检索数据,该服务从网店返回不同的类别。因为不同的类别ve不同层数(电脑-桌面-游戏与打印机-3d-产品)我每次都会再次调用同一个活动,但您可以使用片段,堆叠它们,并在按下“后退”按钮时使用片段管理器为您处理堆叠操作,但片段不只是负责UI。我有一些按钮,比如说,这些按钮代表具有特定ID的对象,用于请求我的调用。片段管理器是否也会传递values还是只关心我的UI?