汎用的な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("エラーですよ!");
実行結果

使い方は普通にトーストを使う時よりも少しだけ面倒になるので、単独で使うならメリットは少ないわけだ。