如何在按下后退箭头图标时将意图数据发送回上一个活动?

时间:2016-10-21 13:09:45

标签: android android-intent activity-finish

我有一个Android应用程序,它在GridView中显示元素:这些元素中的每一个都是可点击的,并以其详细信息启动一个Activity;然后你可以通过第二个活动进行另一个活动来添加更多数据。 我的问题是:当我从第3个活动回到第2个活动时,我的应用程序崩溃了(我知道这是因为从第3个活动到第2个活动,所谓的第2个活动没有得到它需要的意图数据。)

我该怎么做才能解决这个问题? 我的Gridview调用了第二个活动

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Intent i = new Intent(getApplicationContext(), PokemonDetails.class);
                i.putExtra("id", position);
                startActivity(i);
            }
        });

我的第二个活动叫第3个:

pokeDetails.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(getApplicationContext(), MyPokeDetails.class);
                    startActivity(i);
                }
            });

4 个答案:

答案 0 :(得分:2)

您可以使用 startActivityForResult()

执行此操作

例如:

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

SecondActivity中设置要返回FirstActivity的数据。如果您不想退回,请不要设置任何内容。

例如:在secondActivity中,如果要发回数据:

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

如果您不想返回数据:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

现在,在FirstActivity课程中,请为onActivityResult()方法编写以下代码。

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

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

答案 1 :(得分:1)

你可以使用相同的按钮功能覆盖onBackPressed()方法。

@Override
public void onBackPressed() {
   //put Intent to go back here
 }

答案 2 :(得分:1)

当您返回时,应从最后一个状态重新创建您的活动。您是否在第二个活动中检查数据的意图是否为空?我想应用程序可能因此而崩溃。 您也可以使用savedInstanceState。

覆盖onCreate并将您需要的ID放入捆绑包中。如果调用了第二个Activity的Bundle,请查看<video loop autoplay muted poster="path/to/screenshot.jpg"> <source src="path/to/video.webm" type="video/webm"> <source src="path/to/video.ogg" type="video/ogg"> <source src="path/to/video.mp4" type="video/mp4"> </video> 是否为非null并获取您的值。 更多信息:https://developer.android.com/training/basics/activity-lifecycle/recreating.html

答案 3 :(得分:0)

您应该使用startActivityForResult()代替startActivity()。有关详细信息,请参阅this answer和Official documentation