Skip to content

Instantly share code, notes, and snippets.

@yyaammaa
Last active August 29, 2015 13:56
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yyaammaa/8911941 to your computer and use it in GitHub Desktop.
Save yyaammaa/8911941 to your computer and use it in GitHub Desktop.

MergeAdapter便利

ふとFoursquareアプリのLicense表示を見たら便利そうなライブラリを発見して便利だったので紹介。

MergeAdapterとは

MergeAdapterは、google groupsとかstackoverflowでAndroidの問題を探しているとかなりの頻度で目にするMark Murphy(@commonsguy) さんが作成した便利なAdapterです。

MergeAdapter accepts a mix of Adapters and Views and presents them as one contiguous whole to whatever ListView it is poured into. This is good for cases where you have multiple data sources, or if you have a handful of ordinary Views to mix in with lists of data, or the like.

その名のとおり、このAdapterにいろんなもの(ViewとかAdapterとか)をマージすることができます。 例えば、

  • ListViewに複数のリストを表示したい
    • ユーザ一覧と、なにかのアイテム一覧をそれぞれX件ずつ出したい
    • なおかつユーザとアイテムのリストの前にはそれぞれヘッダ的なものも出したい
    • それ以外にも一番上には検索ボタンとかも置きたい

このようなユースケースのときに、簡単に記述することができます。

public class SampleActivity extends Activity {

  private void setUpViews() {
    ListView listView = (ListView) findViewById(R.id.listview);
    LayoutInflater inflater = getLayoutInflater();

    MergeAdapter mergeAdapter = new MergeAdapter();

    // 検索ボタンを追加
    View searchButton = inflater.inflate(R.layout.search_button, null);
    mergeAdapter.addView(searchButton);

    // Header 1 を追加
    View header1 = inflater.inflate(R.layout.header1, null);
    mergeAdapter.addView(header1);

    // UserListAdapterを追加
    UserListAdapter userAdapter = new UserListAdapter(this);
    mergeAdapter.addAdapter(userAdapter);

    // Header 2 を追加
    View header2 = inflater.inflate(R.layout.header2, null);
    mergeAdapter.addView(header2);

    // ItemListAdapterを追加
    ItemListAdapter itemAdapter = new ItemListAdapter(this);
    mergeAdapter.addAdapter(itemAdapter);

    listView.setAdapter(mergeAdapter);
  }

}

MergeAdapterにaddView()addAdapter()でViewやAdapterをもりもり追加できます。 注意事項としては、ListViewにsetAdapterする前にView, Adapterはaddしておく必要があります。

CWAC MergeAdapter: Stitching Together Rows

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment