Android基础:ListView + ViewPager ( 三 )
来源:互联网 发布:大数据物联网总部 编辑:程序博客网 时间:2024/05/06 13:22
自定义类MyViewPager,并把MyViewPager作为listview的HeadView使用
解决viewpager滑动的问题
1 效果图:
2 布局:activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView></RelativeLayout>
3 代码:MainActivity.java + MyViewPager.java
3-1 MyViewPager.java
package com.cqc.listview_viewpager03;import android.content.Context;import android.support.v4.view.ViewPager;import android.view.MotionEvent;public class MyViewPager extends ViewPager { public MyViewPager(Context context) { super(context); } //让父控件不拦截事件,直接传递给viewpager做处理 @Override public boolean dispatchTouchEvent(MotionEvent ev) { requestDisallowInterceptTouchEvent(true);// getParent().requestDisallowInterceptTouchEvent(true); return super.dispatchTouchEvent(ev); }}
3-2 MainActivity.java
package com.cqc.listview_viewpager03;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;/** * 代码:将MyViewPager作为ListView的头布局显示,并让其父控件不拦截事件 * 缺点:无法刷新 * @author cui * */public class MainActivity extends Activity { private MyViewPager viewpager; private ListView listView; private List<ImageView> imageList = new ArrayList<ImageView>(); private List<String> lvList = new ArrayList<String>(); private Context context = MainActivity.this; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); //当然我们也可以把自定义的MyViewPager放在布局中引用,这样就不用listView.addHeaderView(viewpager); //但是这根原生的viewpager就没区别了。 viewpager = new MyViewPager(context); //错误,原因:ViewPager.LayoutParams无法转换成AbsListView.LayoutParams// ViewPager.LayoutParams params = new ViewPager.LayoutParams();// params.width = ViewPager.LayoutParams.MATCH_PARENT;// params.height = 200; AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 500); viewpager.setLayoutParams(params); initListViewData(); initViewPagerData(); initViewPager(); initListView(); } private void initListView() { listView.addHeaderView(viewpager); MyLvAdapter adapter = new MyLvAdapter(); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "ListView--" + position, Toast.LENGTH_SHORT).show(); } }); } private void initListViewData() { lvList.clear(); for (int i = 0; i < 100; i++) { lvList.add("item--" + i); } } class MyLvAdapter extends BaseAdapter { @Override public int getCount() { return lvList.size(); } @Override public Object getItem(int position) { return lvList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv = new TextView(MainActivity.this); tv.setText(lvList.get(position)); tv.setTextSize(30); return tv; } } private void initViewPagerData() { imageList.clear(); ImageView iv1 = new ImageView(this); iv1.setBackgroundResource(R.drawable.a); ImageView iv2 = new ImageView(this); iv2.setBackgroundResource(R.drawable.b); ImageView iv3 = new ImageView(this); iv3.setBackgroundResource(R.drawable.c); ImageView iv4 = new ImageView(this); iv4.setBackgroundResource(R.drawable.d); imageList.add(iv1); imageList.add(iv2); imageList.add(iv3); imageList.add(iv4); } private void initViewPager() { MyPagerAdapter adapter = new MyPagerAdapter(); viewpager.setAdapter(adapter); viewpager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { Toast.makeText(MainActivity.this, "viewpager--" + position, Toast.LENGTH_SHORT).show(); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); } class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return imageList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(imageList.get(position)); return imageList.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }}
4 缺点:
使用的是原生的listview,无法刷新,所以我们引用第三方的库PulltoRresh.
见下一篇:Android基础:ListView + ViewPager ( 四 )
0 0
- Android基础:ListView + ViewPager ( 三 )
- Android基础:ListView + ViewPager ( 一 )
- Android基础:ListView + ViewPager ( 二 )
- Android基础:ListView + ViewPager ( 四 )
- Android基础:ListView + ViewPager ( 五 )
- Android基础:ListView和ViewPager的Adaper
- android 基础 ---> ViewPager
- 介绍Fragment、ListView、ViewPager三者用法
- ScrollView ViewPager ListView三者共存
- android学习三:ViewPager使用
- android ViewPager三种适配器
- android listview viewpager 异步加载图片 headerview
- android 滑动冲突 ScrollView Viewpager listview 等
- android 横向ListView Viewpager Gridview等组件
- Android listview viewpager解决冲突 滑动
- Android listview viewpager解决冲突 滑动
- Android之ListView头部添加ViewPager
- android(9) ListView + ScrollView + ViewPager布局
- iOS图像处理(2)绘制文本
- 深入理解Dalvik字节码指令及Smali文件
- 将 Spark Streaming + Kafka direct 的 offset 保存进入Zookeeper
- [BZOJ4036] set - 子集和变换 - 容斥原理/莫比乌斯反演定理
- 数据采集与传输
- Android基础:ListView + ViewPager ( 三 )
- html div标签以及background-position偏移量的应用
- 静默安装oracle11g单实例-腾讯云
- 配置java开发环境,使用cmd编译java文件
- 网络层处理,及使用sproto
- 关于ScrollView的应用
- 全文检索 Lucene(4)
- HDU 4902 Nice boat 线段树(区间更新)
- Mybatis分页实现