从子活动返回后,如何在顶级活动中运行代码?

时间:2016-03-11 05:44:25

标签: android

我的顶级活动会显示引号,并且可以启动添加引号的子活动。所有这些都有效,但我想在添加报价后这样做,它会更新到新报价。我有一个方法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()之后,我不希望这个代码运行。只有在我从这个特定的儿童活动回来后。

1 个答案:

答案 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);