@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.free_flow_photo_grid_activity);

    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.frameLayout);

    final ImageAdapter adapter = new ImageAdapter();

    container = new FreeFlowContainer(this);

    DefaultLayoutAnimator anim = (DefaultLayoutAnimator) container.getLayoutAnimator();
    anim.animateAllSetsSequentially = false;
    anim.animateIndividualCellsSequentially = false;

    container.requestFocus();
    hLayout = new HLayout();
    hLayout.setLayoutParams(new HLayout.LayoutParams(100, 150, 600));

    vLayout = new VLayout();
    vLayout.setLayoutParams(new VLayout.LayoutParams(100, 600, 150));

    vGridLayout = new VGridLayout();
    vGridLayout.setLayoutParams(new VGridLayout.LayoutParams(200, 200, 600, 100));

    hGridLayout = new HGridLayout();
    hGridLayout.setLayoutParams(new HGridLayout.LayoutParams(200, 200, 100, 600));

    layouts = new FreeFlowLayout[] {vLayout, hLayout, vGridLayout, hGridLayout};

    container.setAdapter(adapter);
    container.setLayout(layouts[currentLayoutIndex]);

    frameLayout.addView(container);

    changeButton = ((Button) frameLayout.findViewById(R.id.transitionButton));
    changeButton.setText("Layout");

    changeButton.setOnClickListener(
        new OnClickListener() {

          @Override
          public void onClick(View v) {
            currentLayoutIndex++;
            if (currentLayoutIndex == layouts.length) {
              currentLayoutIndex = 0;
            }
            container.setLayout(layouts[currentLayoutIndex]);
          }
        });

    jumpButton = (Button) findViewById(R.id.jumpButton);
    jumpButton.setOnClickListener(
        new OnClickListener() {

          @Override
          public void onClick(View v) {
            int section = (int) (adapter.getNumberOfSections() * Math.random());
            int index = (int) (adapter.getSection(section).getDataCount() * Math.random());
            String s = "section = " + section + ", index = " + index;
            Toast.makeText(FreeFlowPhotoGridActivity.this, s, Toast.LENGTH_SHORT).show();
            container.scrollToItem(section, index, false);
          }
        });

    jumpButtonAnim = (Button) findViewById(R.id.jumpButtonAnim);
    jumpButtonAnim.setOnClickListener(
        new OnClickListener() {

          @Override
          public void onClick(View v) {
            int section = (int) (adapter.getNumberOfSections() * Math.random());
            int index = (int) (adapter.getSection(section).getDataCount() * Math.random());
            String s = "section = " + section + ", index = " + index;
            Toast.makeText(FreeFlowPhotoGridActivity.this, s, Toast.LENGTH_SHORT).show();
            container.scrollToItem(section, index, true);
          }
        });

    container.setOnItemClickListener(
        new OnItemClickListener() {

          @Override
          public void onItemClick(AbsLayoutContainer parent, FreeFlowItem proxy) {
            Log.d("Test", "container item: " + proxy.itemSection + " /  " + proxy.itemIndex);
          }
        });

    changeButton.bringToFront();
    jumpButton.bringToFront();
    jumpButtonAnim.bringToFront();
  }