토스트 메시지가 표시되지 않거나 표시 할 메시지가 전송하려는 메시지와 다른 경우에만 내 토스트 메시지가 사용자에게 표시됩니다. . 메시지가 사용자에게 표시되는 것과 동일한 경우 메시지가 통과하지 못하도록합니다 (무의미하기 때문에).축배 메시지가 기존 토스트와 다른 경우에만 표시
이 목표를 달성하기 위해 나는 축사를 보여줄 방법이 없다면 this 게시물을 보았습니다.
두 요구 사항을 모두 충족하도록 코드를 수정했습니다.
private Toast toast;
public void showAToast (String st, boolean isLong){
try{
toast.getView().isShown();
String text = ((TextView)((LinearLayout)toast.getView()).getChildAt(0)).getText().toString();
if(!text.equalsIgnoreCase(st)){
//New message, show it after
if(isLong){
toast = Toast.makeText(getApplicationContext(), st, Toast.LENGTH_LONG);
} else {
toast = Toast.makeText(getApplicationContext(), st, Toast.LENGTH_SHORT);
}
toast.show();
}
} catch (Exception e) {
//New message
if(isLong){
toast = Toast.makeText(getApplicationContext(), st, Toast.LENGTH_LONG);
} else {
toast = Toast.makeText(getApplicationContext(), st, Toast.LENGTH_SHORT);
}
toast.show();
}
}
마지막 토스트 메시지가 통과하려는 메시지와 동일한 경우 어떤 메시지도 통과하지 않습니다.
정확하게 발생하는 이유는 확실치 않지만 문제의 원인을 파악하는 데 디버깅 메시지를 넣습니다.
토스트 메시지가 앱의 수명 동안 전송 된 경우 toast.getView(). isShown()은 예외를 throw하지 않습니다 (토스트가 표시되지 않음을 의미한다고 가정).
제 질문은 어떻게 해결할 수 있습니까? 확실히 원하는 기능을 구현할 수있는 방법이 있어야합니다.
토스트 한 가장 최근의 문자열을 추적 할 수 있습니까? 그럼 그냥 equals()와 문자열 비교를 할 수 있습니다. –
코드 - 견습생 요점을 놓치고 있습니다. 문제는 문자열이 잘못 비교되는 것이 아니라 토스트가 응용 프로그램 수명주기의 어느 시점에서든 전송 된 경우 toast.isShown() 메서드가 진행되는 것입니다. 즉, 화면에 토스트가 없다고해도 catch 블록 코드 대신 try 블록 코드를 계속 실행합니다 (예를 들어 가정합니다). 원하는 효과를 얻기 위해이 문제를 해결할 수있는 방법을 묻습니다. – NuffsaidM8
OIC ... 네, 전 질문을 완전히 오해 했습니다만, 당신이 생각한 이유가 아니라 ... 나쁘다. –