2015年12月30日水曜日

Android Library の生産性の悪さ

年末に小ネタを Android 開発、生産性が悪いですね〜。自分は Java を生産性の低い言語だと考えてるのもあって、イライラもマックスですね。 Androidライブラリにリソースを組み込めないのも、生産性を下げる大きな要因だと思いませんか? DRY の原則を適応できない。 小ネタで、ログイン・ダイアログをライブラリ用として書いてみました。 Activity からは、下のような感じで呼出ます。
  showLoginDialog(this, new OnLoginListener() {
    @override
    public void onLogin(String name, String pass, int which) {
       if( DialogInterface.BUTTON_POSITIVE == which ) {
          if( validPassword(name, pass ) {
          } else {
          }
       } else {
          finish();
       }
    }
  });
import を略してすみませんが、以下の感じです。
  public interface OnLoginListener {
    public void onLogin(String name, String pass, final int which);
  }

  public static AlertDialog.Builder createLoginDialog(final Context context, final OnLoginListener l ) {
    final LinearLayout ll = new LinearLayout(context);
    final EditText userEditView = new EditText(context);
    final EditText passEditView = new EditText(context);
    final TextView tv1 = new TextView(context);
    final TextView tv2 = new TextView(context);
    final DialogInterface.OnClickListener ocl = new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialogInterface, int which) {
        l.onLogin(userEditView.getText().toString(), passEditView.getText().toString(), which);
      }
    };
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT);
    ll.setLayoutParams(params);
    ll.setOrientation(LinearLayout.VERTICAL);
    tv1.setText("USER:");
    userEditView.setInputType(android.text.InputType.TYPE_CLASS_TEXT);
    tv2.setText("PASSWORD:");
    passEditView.setInputType(android.text.InputType.TYPE_CLASS_TEXT);
    ll.addView(tv1);
    ll.addView(userEditView);
    ll.addView(tv2);
    ll.addView(passEditView);
    return new AlertDialog.Builder(context)
            .setIcon(android.R.drawable.ic_dialog_info)
            .setTitle("login")
            .setView(ll)
            .setPositiveButton(android.R.string.ok, ocl)
            .setNegativeButton(android.R.string.cancel, ocl);
  }

  public static void showLoginDialog(final Context context, final OnLoginListener l) {
    createLoginDialog(context,l).show();
  }
  
  

0 件のコメント: