Skip to content

Instantly share code, notes, and snippets.

@Nathaniel100
Created August 18, 2016 14:29
Show Gist options
  • Save Nathaniel100/0430a2f07396c312ac1e00f531130218 to your computer and use it in GitHub Desktop.
Save Nathaniel100/0430a2f07396c312ac1e00f531130218 to your computer and use it in GitHub Desktop.
ViewPager as listview header view
public class TouchInterceptActivity extends Activity implements ViewPager.OnPageChangeListener {
private ViewPager mViewPager;
private ListView mListView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.touch_intercept);
mViewPager = new ViewPager(this);
mViewPager.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT,
getResources().getDimensionPixelSize(R.dimen.header_height)));
mListView = (ListView) findViewById(R.id.list);
mListView.addHeaderView(mViewPager);
mListView.setAdapter(new ItemsAdapter(this));
mViewPager.setOnPageChangeListener(this);
mViewPager.setAdapter(new HeaderAdapter(this));
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
//While the ViewPager is scrolling, disable the ScrollView touch intercept
// so it cannot take over and try to vertical scroll
boolean isScrolling = state != ViewPager.SCROLL_STATE_IDLE;
mListView.requestDisallowInterceptTouchEvent(isScrolling);
}
/*
* Simple ListAdapter that draws a series of row items
*/
private static class ItemsAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public ItemsAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return 25;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.intercept_row, parent, false);
}
TextView v = (TextView) convertView.findViewById(R.id.text);
v.setText(String.format("Item Row %d", position + 1));
return convertView;
}
}
/*
* Simple PagerAdapter that just draws a small group of colored views
*/
private static class HeaderAdapter extends PagerAdapter {
private static final int[] COLORS = { 0xFF555500, 0xFF770077, 0xFF007777, 0xFF777777 };
private Context mContext;
public HeaderAdapter(Context context) {
mContext = context;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
TextView textView = new TextView(mContext);
textView.setBackgroundColor(COLORS[position]);
textView.setGravity(Gravity.CENTER);
textView.setText("Header Card " + position);
container.addView(textView);
return textView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return COLORS.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment