Cleaner View Casting with Generics


AndroidでViewを取得するには、一般的に次のようにします.
TextView textView = (TextView) findViewById(R.id.textview);
何度もfindViewByIdを書いたことがあると思いますが、毎回キャストして不快ではないでしょうか.今日、ある男がこの問題を解決する秘密兵器を思いついた:汎用型.プロジェクトのベースクラスActivityに次の関数を追加します.
	@SuppressWarnings("unchecked")
	public final <E extends View> E getView(int id) {
		try {
			return (E) findViewById(id);
		} catch (ClassCastException ex) {
			Log.e(TAG, "Could not cast View to concrete class.", ex);
			throw ex;
		}
	}

次のようにしてViewを取得できます.
TextView textView = getView(R.id.textview);
Button button = getView(R.id.button);
ImageView image = getView(R.id.imageview);
注:getView関数をカスケードで呼び出す場合は、次の例のようにCastが必要です.
private static void myMethod (ImageView img) {
	    //Do nothing
	}
	@Override
	public void onCreate (Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    myMethod(getView(R.id.imageview)); //        
	    myMethod((ImageView) getView(R.id.imageview)); //  Cast   
	}

Read more: http://blog.chengyunfeng.com/?p=541