2011-03-31 3 views
9

나는 다음과 같은 코드가 있습니다 안드로이드에서 다른 방법으로 만든 토스트를 취소하는 방법은 무엇입니까?

private Toast movieRecordToast; 

    private void displayNextMovie() { 
     if (movieRecordToast != null) movieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often) 
     movieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT); 
     movieRecordToast.show(); 

    private void displayPrevMovie() { 
     if (movieRecordToast != null) movieRecordToast.cancel(); 
     movieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT); 
     movieRecordToast.show();   

그러나 displayNextMovie 경우

가 여러 번 빠르게이라고하고 displayPrevMovie가 호출됩니다 "다음"토스트는 여전히 표시되고 그 "이전"가 표시됩니다 후에 만. 취소가 제대로 작동하지 않는 것 같습니다.

+0

UPD를. 같은 것에 관한 다른 질문을 본다 - 안드로이드가 너무 빨리 토스트를 취소하지 않는 것처럼 보입니다 ... –

+1

제쳐두고, private void displayMovieToast (String s)를 사용하면 "Prev "또는"다음 "을 인수로 사용합니까? – rajath

답변

28

을 대신 새로운 Toast 객체에게 새 텍스트를 쉽게 하나의 Toast 객체에 저장할 수있는 표시 할 때마다 만드는 언제든지 현재 Toast을 취소하십시오. Toast이 표시되기 전에 Toast.setText() 기능으로 텍스트를 변경할 수 있습니다.

샘플 코드 :

private Toast mToastText; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Create the object once. 
    mToastText = Toast.makeText(this, "", Toast.LENGTH_SHORT); 
} 

private void displayText(final String message) { 
    mToastText.cancel(); 
    mToastText.setText(message); 
    mToastText.show(); 
} 
+3

나는 당신의 해결책을 좋아하지만 지금은 내 토스트가 나타나지 않고 있습니다. 어떤 아이디어? :? – AlvaroSantisteban

+4

필자의 경우, mToastText.cancel()은 축배가 표시되지 않도록했다. 그것 없이는 완벽하게 작동합니다. :) – AlvaroSantisteban

+0

나를 위해 완벽하게 작동합니다, 감사합니다. 이것은 나이 들어서 나를 괴롭혔다! – jason

0

사용자에게 다음/이전 정보를 표시하는 방법에는 여러 가지가 있다고 생각합니다. 나는 토스트를 전부 빼 버릴 것이며 은 TextView의 텍스트를 다음/이전 영화의 이름으로 업데이트합니다. 그건 당신의 문제를 제거하고 IMHO는 더 나은 UI를 만듭니다. 설계 요구 사항이 토스트 알림을 요청할 경우

그러나, 시도 :

private Toast nextMovieRecordToast; 
private Toast prevMovieRecordToast; 


private void displayNextMovie() { 
    if (prevMovieRecordToast != null) prevMovieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often) 
    nextMovieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT); 
    nextMovieRecordToast.show();} 

private void displayPrevMovie() { 
    if (nextMovieRecordToast != null) nextMovieRecordToast.cancel(); 
    prevMovieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT); 
    prevMovieRecordToast.show(); }  
+0

고마워요, @ OceanBlue. 그러나 displayNextMovie를 여러 번 호출하면 "Next"메시지 대기열이 생기게됩니다. –

+0

음, 원하는대로 달라지는 것 같습니다. 사용자는 "Prev"토스트를 볼 수 있습니다. 뒤에 나오는 "다음"토스트는 스스로 시간을 초과합니다. 따라서이 코드를 실행하면 효과는 원하는대로되어야합니다. 그러나 ... 당신은 이것을 위해 토스트를 사용해야한다고 확신합니까? – OceanBlue

0

wroclai의 솔루션이 우수합니다! 그러나 짧은 메시지 토스트와 짧은 메시지 토스트를 할 때 Toast를 나사로 고정합니다. 이전 개체를 사용하는 대신이를 수정하려면 다시 만드십시오. 그래서 그 대신이 라인의 :
mToastText.setText(message);
쓰기이 하나 myToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
애니메이션도 좋아 보이는 :)

관련 문제