年末に小ネタを
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 件のコメント:
コメントを投稿