汎用的なStatusLineを作る - part2
まずは簡単な方、トーストを使ったステータスラインの実装からだ。
といっても何も難しいことは無い。インタフェースでやりたいことをToastを使って実装するだけだ。
ToastStatusLine.java
public class ToastStatusLine implements IStatusLine { protected Toast toast; protected CharSequence lastMessage; protected CharSequence errorMessage; protected CharSequence guideMessage; public ToastStatusLine(Context context) { this.toast = Toast.makeText(context, "", Toast.LENGTH_SHORT); } @Override public CharSequence getErrorMessage() { return this.errorMessage; } @Override public void setErrorMessage(CharSequence message, View... views) { this.errorMessage = message; this.notificationError(message); this.lastMessage = message; if ( views != null && views.length > 0 ) { for ( View v : views ) { v.requestFocus(); break; } } } private void notificationError(CharSequence message) { this.toast.cancel(); this.toast.setText(message); this.toast.show(); } private void notificationNormal(CharSequence message) { this.toast.cancel(); this.toast.setText(message); this.toast.show(); } @Override public void resetErrorMessage() { this.errorMessage = ""; this.lastMessage = ""; } @Override public CharSequence getMessage() { return this.guideMessage; } @Override public void setMessage(CharSequence message, View... views) { this.guideMessage = message; this.notificationNormal(message); this.lastMessage = message; if ( views != null && views.length > 0 ) { for ( View v : views ) { v.requestFocus(); break; } } } @Override public void invalidateCurrentMessage() { this.notificationNormal(this.lastMessage); } }
Code snipet (Activityのライフサイクル中を前提にしている)
: IStatiusLine statusLine = new ToastStatusLine(this); : : statusLine.setErrorMessage("エラーですよ!");