2017-08-27 60 views
1

因此,我正在處理類似幻燈片的項目,但我的問題是,當我在幻燈片放映的中間時,我想回到我的主要活動中,我的幻燈片將使用我的智能手機上的後退按鈕開始。會發生的是,只要我按下按鈕,它會立即返回,但其他幻燈片將在我在handler.postDelayed(r1, 3000);中設置的3秒後繼續。請幫忙。謝謝如何在飛濺活動中按下後退按鈕時完成其他活動?

public class Dad1 extends AppCompatActivity { 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dad1); 

     Runnable r1 = new Runnable() { 
      @Override 
      public void run() { 
       Intent i = new Intent(getApplicationContext(), Dad2.class); 
       startActivity(i); 
       finish(); 
      } 
     }; 
     Handler handler = new Handler(); 
     handler.postDelayed(r1, 3000); 

    } 
} 
+0

IM困惑。好像你在抱怨你有意添加的延遲 – TooManyEduardos

+0

不,我的問題是,我不想繼續,只要按下後退按鈕就可以繼續進行其他的飛濺活動(幻燈片式的)當im在幻燈片放映時。發生什麼事情是,如果我按下後退按鈕,我會回到我的主要活動(這很好),但其他飛濺活動仍然會繼續,我不希望這樣。 –

回答

1

你可以做的是保持Handler對象在Activity水平。當按下後退按鈕時,只需取消Handler callbacks。所以在這種情況下,您的處理程序的run方法將不會被調用。

請看以下示例代碼:

public class Dad1 extends AppCompatActivity { 

private Handler handler; 

private Runnable myRunnable; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    initRunnable(); 
    handler.postDelayed(myRunnable,3000); 
} 

private void initRunnable() { 
    myRunnable = new Runnable() { 
     @Override 
     public void run() { 
      Intent i = new Intent(getApplicationContext(), Dad2.class); 
      startActivity(i); 
      finish(); 
     } 
    }; 
} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    if(handler!=null){ 
     handler.removeCallbacks(myRunnable); 
    } 
} 

}

+0

它表示無法解析符號'處理程序' –

+0

請立即檢查 –

+0

我需要創建removeCallbacks方法嗎?如何?對不起,我是初學者 –

相關問題