title: Implement Pagination on tab layout
body: <p>I know how to develop the tab activity using xml layout and also i know how to do paging in android as is seen in android market application</p>
  
  <p>but i am not getting how to merge this paging concept with tab activity and how to create tabactivity from the java code :</p>
  
  <p>see the code below i use for paging using linear layout :</p>
  
  <p><strong>sample.java</strong></p>
  
  <pre><code>public class Sample extends Activity {
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          // creates the Pagination Layout
          PaginationLayout paginationLayout = new PaginationLayout(this);
          paginationLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
  
          // creates content only for sample
          TableLayout table = new TableLayout(this);
          table.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
          table.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
  
          TableRow row = new TableRow(this);
          row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
          table.addView(row);
  
          TableRow row2 = new TableRow(this);
          row2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
          table.addView(row2);
  
          for(int i = 0; i&lt; 50;i++){
              Button button = new Button(this);
              button.setText("Button " + i);
              if (i%2==0) {
                  row.addView(button);
              } else {
                  row2.addView(button);
              }
          }
  
          // add the content in pagination
          paginationLayout.addView(table);
          // set pagination layout
          setContentView(paginationLayout);
      }
  }
  </code></pre>
  
  <p><strong>and the code for pagination layout is :</strong></p>
  
  <pre><code>public class PaginationLayout extends LinearLayout {
  
      private int mPageActive = 0;
      private HorizontalScrollView mScroll;
      private LinearLayout mBar;
  
      public PaginationLayout(Context context) {
          super(context);
  
          setOrientation(LinearLayout.VERTICAL);
  
          // creates the class that will control the gestures and apply it in the
          // scroll
          final GestureDetector mGestureDetector = new GestureDetector(new MySimpleOnGestureListener());
  
          mScroll = new HorizontalScrollView(context);
          mScroll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
          mScroll.setOnTouchListener(new View.OnTouchListener() {
  
              public boolean onTouch(View v, MotionEvent event) {
                  if (mGestureDetector.onTouchEvent(event)) {
                      return true;
                  } else {
                      return false;
                  }
              }
          });
  
          // creates Previous and Next buttons
          Button btnPrevious = new Button(getContext());
          btnPrevious.setLayoutParams(new LayoutParams(150, LayoutParams.FILL_PARENT));
          btnPrevious.setText("Previous");
          btnPrevious.setOnClickListener(new OnClickListener() {
  
              public void onClick(View v) {
                  previous();
              }
          });
  
          Button btnMid = new Button(getContext());
          btnMid.setLayoutParams(new LayoutParams(150, LayoutParams.FILL_PARENT));
          btnMid.setText("Mid");
          btnMid.setOnClickListener(new OnClickListener() {
  
              public void onClick(View v) {
                  next();
              }
          });
  
          Button btnNext = new Button(getContext());
          btnNext.setLayoutParams(new LayoutParams(150, LayoutParams.FILL_PARENT));
          btnNext.setText("Next");
          btnNext.setOnClickListener(new OnClickListener() {
  
              public void onClick(View v) {
                  next();
              }
          });
  
          // bar that include the buttons
          mBar = new LinearLayout(getContext());
          mBar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
          mBar.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
          mBar.setBackgroundColor(Color.GRAY);
          mBar.addView(btnPrevious);
          mBar.addView(btnNext);
          //mBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.android_1080p));
          mBar.setVisibility(LinearLayout.INVISIBLE);
  
          // add bar and scroll in the super (LinearLayout)
          super.addView(mBar);
          super.addView(mScroll);
      }
  
      /**
       * All that the user include is added in the scroll
       */
      @Override
      public void addView(View child) {
          mScroll.addView(child);
      }
  
      /**
       * Controls if the top bar should appear or not
       */
      @Override
      protected void onSizeChanged(int arg0, int arg1, int arg2, int arg3) {
          super.onSizeChanged(arg0, arg1, arg2, arg3);
          View chield = mScroll.getChildAt(0);
          if (chield != null) {
              if (chield.getMeasuredWidth() &gt; getWidth()) {
                  mBar.setVisibility(LinearLayout.VISIBLE);
              } else {
                  mBar.setVisibility(LinearLayout.INVISIBLE);
              }
          }
      }
  
      /**
       * does the effect "back a page"
       */
      public void previous() {
          mPageActive = (mPageActive &gt; 0) ? mPageActive - 1 : 0;
          mScroll.smoothScrollTo(mPageActive * mScroll.getWidth(), 0);
      }
  
      /**
       * does the effect "forward a page"
       */
      public void next() {
          int pageWidth = mScroll.getWidth();
          int nextPage = (mPageActive + 1) * pageWidth;
          if (nextPage - mScroll.getScrollX() &lt;= pageWidth) {
              mScroll.smoothScrollTo(nextPage, 0);
              mPageActive++;
          } else {
              mScroll.smoothScrollTo(mScroll.getScrollX(), 0);
          }
      }
  
      /**
       * Private class that controls the gestures, forward or back a page.
       */
      private class MySimpleOnGestureListener extends SimpleOnGestureListener {
  
          @Override
          public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
  
              if (e1 != null &amp;&amp; e2 != null) {
                  if (e1.getX() - e2.getX() &gt; 0) {
                      // forward...
                      next();
                      return true;
                  } else if (e2.getX() - e1.getX() &gt; 0) {
                      // back...
                      previous();
                      return true;
                  }
              }
  
              return false;
          }
      }
  }
  </code></pre>