我的顶级活动会显示引号,并且可以启动添加引号的子活动。所有这些都有效,但我想在添加报价后这样做,它会更新到新报价。我有一个方法setLatestQuote()
,它使用动画设置文本(通过TextSwitcher
)并使用另一个动画更改背景颜色。
我不确定在我们从活动中返回后如何运行代码。我已尝试覆盖onActivityResult()
,它似乎在实际返回主要活动之前运行所有代码。
我像这样启动子活动:
Intent intent = new Intent(Quotr.this, AddQuote.class);
startActivityForResult(intent, 0);
overridePendingTransition(R.anim.pull_in_from_bottom, R.anim.pullback);
然后该活动将根据引用是否已添加或用户是否取消来设置其返回值,这是我的onActivityResult()
方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case 0:
if(resultCode == RESULT_OK) {
View view = findViewById(R.id.touch);
Snackbar.make(view, "Quote added", Snackbar.LENGTH_SHORT);
current = quoteList.size() - 1;
setLatestQuote();
}
break;
default:
Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
}
}
但正如我所提到的,它似乎在子活动关闭时运行所有这些代码,而不是在父活动打开后运行,因此Snackbar不会显示,并且引号只是传送到视图中。 / p>
我非常确定onResume()
在活动完成后启动,但根据我的理解,onResume将启动的不仅仅是当我从此子活动返回时,例如在onCreate()
之后,我不希望这个代码运行。只有在我从这个特定的儿童活动回来后。
答案 0 :(得分:0)
这是一个棘手的代码,你只能延迟显示时间。 似乎有一些“慢点”。你需要找到它并修复它。
或者如@Duncan所提到的,您可以在onActivity结果中设置布尔标志,并检查onResume中的标志以显示您的Snackbar。
更改
Snackbar.make(view, "Quote added", Snackbar.LENGTH_SHORT);
要
// In your activity
Handler hander = new Hander();
// Replace to...
handler.postDelayed(new Runnable() {
@Override
public void run() {
Snackbar.make(view, "Quote added", Snackbar.LENGTH_SHORT);
}
}, 1000);