android listview嵌套viewpager冲突解决方法

  • A+
所属分类:Android开发

直接上代码:

  1. /**
  2.  * viewpage 和listview 相互冲突 将父view 传递到viewpage 里面
  3.  * 使用父类的方法 parent.requestDisallowInterceptTouchEvent(true);
  4.  * 当 requestDisallowInterceptTouchEvent 如果为true的时候 表示:父view 不拦截子view的touch 事件
  5.  * 这个方法只是改变flag  
  6.  * @author http://www.lovecoder.cn/
  7.  * 
  8.  */
  9. public class DecoratorViewPager extends ViewPager {
  10.     private ViewGroup parent;
  11.     public DecoratorViewPager(Context context) {
  12.         super(context);
  13.     }
  14.     public DecoratorViewPager(Context context, AttributeSet attrs) {
  15.         super(context, attrs);
  16.     }
  17.     public void setNestedpParent(ViewGroup parent) {
  18.         this.parent = parent;
  19.     }
  20.     @Override
  21.     public boolean dispatchTouchEvent(MotionEvent ev) {
  22.         if (parent != null) {
  23.             parent.requestDisallowInterceptTouchEvent(true);
  24.         }
  25.         return super.dispatchTouchEvent(ev);
  26.     }
  27.     @Override
  28.     public boolean onInterceptTouchEvent(MotionEvent arg0) {
  29.         if (parent != null) {
  30.             parent.requestDisallowInterceptTouchEvent(true);
  31.         }
  32.         return super.onInterceptTouchEvent(arg0);
  33.     }
  34.     @Override
  35.     public boolean onTouchEvent(MotionEvent arg0) {
  36.         if (parent != null) {
  37.             parent.requestDisallowInterceptTouchEvent(true);
  38.         }
  39.         return super.onTouchEvent(arg0);
  40.     }
  41. }

具体使用方法:

1、activity_main.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent" >
  5.     <ListView
  6.         android:id="@+id/lv"
  7.         android:layout_width="wrap_content"
  8.         android:layout_height="wrap_content"
  9.         android:text="@string/hello_world" />
  10. </RelativeLayout>

2、MainActivity

  1. public class MainActivity extends Activity {
  2.     private ListView lv;
  3.     ArrayList<String> arrayList = new ArrayList<String>();
  4.     @Override
  5.     protected void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         setContentView(R.layout.activity_main);
  8.         lv = (ListView) findViewById(R.id.lv);
  9.         View header = LayoutInflater.from(MainActivity.this).inflate(R.layout.viewpage_layout, null);
  10.         DecoratorViewPager vp = (DecoratorViewPager) header.findViewById(R.id.vp);
  11.         vp.setNestedpParent((ViewGroup)vp.getParent());
  12.         MyPagapter myPagapter = new MyPagapter(MainActivity.this);
  13.         vp.setAdapter(myPagapter);
  14.         lv.addHeaderView(header);
  15.         // listview的测试数据
  16.         for (int i = 0; i < 90; i++) {
  17.             arrayList.add(i + "  -------------     " + System.currentTimeMillis());
  18.         }
  19.         ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, R.id.textView1, arrayList);
  20.         lv.setAdapter(adapter);
  21.     }
  22.     public class MyPagapter extends PagerAdapter {
  23.         private Context mContext;
  24.         public MyPagapter(Context mContext) {
  25.             this.mContext = mContext;
  26.         }
  27.         @Override
  28.         public int getCount() {
  29.             return 15;
  30.         }
  31.         @Override
  32.         public boolean isViewFromObject(View arg0, Object arg1) {
  33.             return arg0 == arg1;
  34.         }
  35.         @Override
  36.         public Object instantiateItem(ViewGroup container, final int position) {
  37.             ImageView imageView = new ImageView(mContext);
  38.             imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
  39.             imageView.setBackgroundResource(R.drawable.ic_launcher);
  40.             container.addView(imageView);
  41.             return imageView;
  42.         }
  43.         @Override
  44.         public void destroyItem(ViewGroup view, int position, Object object) {
  45.             view.removeView((View) object);
  46.         }
  47.     }
  48. }

 

收工~~。

 

 

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: