刷新活动并重新打开

时间:2012-01-19 15:37:13

标签: android android-activity

这是我的第一篇文章,所以请你好:) 我有一个问题,没有人在我看过的帖子中给出答案。

我的应用程序有一个列表和一个用于打开活动的按钮,此活动会在按下按钮创建时创建一个新项目以显示在上一个活动的列表中。

我该怎么做?

这是我为第一个按钮编写的代码:

intent = new Intent(this.getBaseContext(), NewTestActivity.class);
this.finish();
startActivity(intent);

这是返回刷新的代码:

Intent intent = new Intent(getBaseContext(), TestListActivity.class);                       
startActivity(intent);

但goback的代码很有用,因为活动不会刷新。 我必须以不同的方式称这项新活动?或者以不同的方式回到previus活动?或者当我回到previus活动时,正常返回并刷新活动?

嗯......这就是全部。 抱歉我的英文不好,如果这个问题已在另一个帖子中得到解答,请给我链接阅读,因为我找不到它:))

PS:我在12月开始使用android。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

  1. 当您要开始新活动时,在实际需要此行为之前,不应关闭当前活动。 (从代码中删除this.finish();行)
  2. 此外,在实际需要之前,不应手动关闭活动活动。当用户按下设备上的“后退”按钮时,Android会从“后台”弹出上一个活动。再读一次Activity文档。
  3. 根据您的描述,您有一个元素列表。因此,为了刷新列表,您需要更新数据集并通过ListView.notifyDataSetChanged()方法调用通知列表。

答案 1 :(得分:1)

在得到真正的答案之前,我想对您的代码进行一些改进。 首先,当从一个Activity创建一个Intent(或者你需要一般的上下文)时,不需要调用getBaseContext(),你可以只使用this

intent = new Intent(this, NewTestActivity.class);

其次,android善于处理活动,您不必使用finish()手动关闭第一个活动。 Android会自动暂停或停止您的第一项活动,并在您返回时将其恢复。

第三,在您的情况下,您可能希望使用startActivityForResult()代替startActivity(),原因我将在下面解释。
这将使您的代码如下所示:

private static final int MY_REQUEST_CODE = 33487689; //put this at the top of your Activity-class, with any unique value.
intent = new Intent(this, NewTestActivity.class);
startActivityForResult(intent, MY_REQUEST_CODE);

现在,startActivityForResult()启动一个活动并等待该新活动的结果。当您在新活动中致电finsih()时,您将在第一个活动onActivityResult() - 方法中结束,其中包含现已关闭的新Activty提供的数据:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode != MY_REQUEST_CODE) return; //We got a result from another request, so for this example we can return.
    if(resultCode != RESULT_OK) return; //The user aborted the action, so we won't get any data.
    //After the above if-statements we know that the activity that gives us a result was requested with the correct request code, and it's action was successful, we can begin extracting the data, which is in the data-intent:
    Item item = (Item) data.getSerializableExtra("customData"); //casts the data object to the custom Item-class. This can be any class, as long as it is serializable. There are many other kinds of data that can be put into an intent, but for this example a serializable was used.
    itemList.add(item); //This is the list that was specified in onCreate()
    //If you use an Adapter, this is the place to call notifyDataSetChanged();
}

为了这一切工作,我们需要在第二个Activity中做一些事情: 创建项目后,我们必须设置结果:

//We begin by packing our item in an Intent (the Item class is an example that is expected to implement Serializable)
Item theCreatedItem; //This is what was created in the activity
Intent data = new Intent();
data.putSerializable(theCreatedItem);
setResult(RESULT_OK, data);
finish();

这应该返回到第一个活动onActivityResult() - 方法和项目,如上所述。