2016-03-11 40 views
0

我的頂級活動顯示引號,並且它可以啓動添加引號的子活動。所有這些都有效,但是我想在添加一個報價之後做到這一點,它會更新爲新的報價。我有一個方法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不顯示,引號只能傳送到視圖中。

我很確定onResume()一旦活動啓動,但從我的理解,onResume將推出更多的不僅僅是當我從這個兒童活動返回時,如onCreate(),並且我不希望此代碼運行然後。只有在我從這個具體的兒童活動回來後。

+0

你之前完成設置 「的setResult(RESULT_OK)」 在您的AddQuote活動? –

+0

是的,onActivityResult代碼運行良好,只是運行得太早。我用Toast通知對它進行了測試,並且它的所有功能都能正常工作,但它不適用於Snackbar並且不能用於播放我的動畫,因爲代碼運行時主要活動尚未啓動。 –

+0

您可以使用onActivityResult調用在您的活動中設置一個標誌,然後檢查onResume中的標誌以運行您的動畫等......這樣您就可以控制並且正在利用活動的生命週期。 –

回答

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); 
+0

這似乎工作,謝謝! –

相關問題