infraterって何だ
レイアウトを別ファイルで定義する方法 | GE Android Blog
androidのレイアウトxml用のSSI*1的な物と理解した。
…じゃ、幾ら何でも何なんで。
無理やりユースケース
- ユーザー登録画面のユーザーの住所入力
- 買い物した商品の送付先住所入力
- 請求書の送付先住所入力
の3つの画面にそれぞれこんなレイアウトを作成するのは面倒臭いので、外部に郵便番号入力用レイアウトのxmlファイルを作成しておいて、
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:text="default" android:id="@+id/zipcode" /> <Button android:text="find" android:id="@+id/btn_findByZipcode" /> <TextView android:text="default" android:id="@+id/address1" /> <TextView android:text="default" android:id="@+id/address2" /> </LinearLayout>
これを使う3つの画面の方で
public class IncludeCheck extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ここは画面ごと代わる LinearLayout mainLayout = (LinearLayout)findViewById(R.id.layout_main); //LayoutInflaterの準備 LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); //郵便番号入力用のパーツを読み込み LinearLayout incLayout = (LinearLayout)inflater.inflate(R.layout.include, null); Button btn = (Button)incLayout.findViewById(R.id.btn_findByZipcode); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 郵便番号検索したり値をセットしたり。(*1) } } mainLayout.addView(incLayout); } }
みたいな感じにするといいんじゃないかな。
もう一手間
この場合、どの画面でもbtn_findByZipcodeがやる事(*1)は同じなんで郵便番号検索する部分を分離して、Singletonなりにするとよさげ。
public class ZipCodeFinder extends OnClickListener{ private static ZipCodeFinder __instance =null; public static ZipCodeFinder getInstance(){ if (__instance==null) __instance = new ZipCodeFinder(); return __instance ; } @Override public void onClick(View v) { // 郵便番号の値を読み取って該当する住所を // address1 / address2 にセットするとか。 } }
的な感じにして、
Button btn = (Button)incLayout.findViewById(R.id.btn_findByZipcode); btn.setOnClickListener(ZipCodeFinder.getInstance());
とか。
*1:server side include : http://e-words.jp/w/SSI.html