我有一个Android应用程序通过twitter4j连接到twitter。在活动中有一个共享按钮和一个TextView。流程如下;
我的问题是,在第二次onCreate()之后,TextView的值会丢失。
- onCreate()
.
.
point = getIntent().getExtras().getInt("point");
.
.
- shareButton.onClick()
.
.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(requestToken.getAuthenticationURL()));// open twitter for authentication
intent .putExtra("point", point);
startActivityForResult(intent , 1);
}
});
thread.start();
.
.
到目前为止我尝试过的事情;
请告诉我如何在Twitter回调后保留这些数据。我可以使用数据库或共享偏好或类似的东西,但还有另一种方式吗?
提前致谢。
修改
当程序进入twitter并返回时,它会再次从onCreate()开始,就像方向改变时一样。当方向改变" Bundle savedInstanceState"有价值但在我的情况下没有价值。
我如何获得savedInstanceState-我在手动之前设置 - 在返回twitter回调后第二次运行onCreate()?
编辑2:
这个网站的一些人真的很奇怪。我在下面发布了一个新帖子的答案,但有人删除了它声称"新帖子应该包括答案"。你知道吗,该帖子有真正的答案。如果不阅读全部内容,请不要这样做。我将以下内容写为编辑。
非常感谢您的回答(@rod_torres)。我已经尝试过你的解决方案(有和没有i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)),在这两种情况下我都无法实现。设置singleTop时的生命周期如下所示;
onCreate() - > Twitter - > onCreate()
从Twitter回来后,没有调用onNewIntent()。该活动被重新创建为一个新实例,因此我可以按照上面的顺序返回后退按钮。我尝试使用singleTask并且工作正常(我的问题的答案是这个,对于那些删除我的帖子而没有阅读此部分的人)。它没有创建活动的新实例,并且调用了onNewIntent()。当我点击后退按钮时,我重定向了我的应用程序的上一个活动,而不是浏览器(Twitter)的任务,尽管Twitter是之前的活动。流程就像;
onCreate() - > Twitter - > onCreate(with bundle) - > onNewIntent()
活动A - >活动B - > Twitter - >活动B(与之前相同)
当我从活动B回来时;
活动A - >浏览器
似乎singleTask模式将我的应用程序的任务带到前台,其中包含所有活动,并将其他应用程序(浏览器)任务带回到堆栈。我对吗?
但我仍然无法理解为什么你的解决方案对我不起作用。我已经阅读了很多关于这方面的文档,我认为应该已经有了。
另外,我不确定是否应该使用singleTask。可能有什么问题我还没有考虑到,有什么不利之处吗?
答案 0 :(得分:1)
正如您在编辑中指出的那样,重新创建了Activity。要使应用程序不重新创建活动,请在Manifest中添加参数launchMode,其值为“singleTop”到您将使用twitter4j的Activity
<activity
android:name=".SecondActivity"
android:label="@string/title_activity_second"
android:launchMode="singleTop">
此外,当您调用该活动时,请添加标志FLAG_ACTIVITY_CLEAR_TOP:
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("string","Second Activity Biches");
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
了解更多信息:
http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP