Android学习 (二十四) 实现ListView跳转到对应页面的ViewPager
来源:互联网 发布:中国大数据规划图 编辑:程序博客网 时间:2024/06/06 02:52
这几天因为项目需求,要实现,点击listView列表跳转到相对应的ViewPager界面。
如图:
我整个测试项目的逻辑结构是这样的:
项目实现后是这样的:
那就分为两个部分来讲。第一部分为ListView,第二部分为ViewPager。
一、
1)新建一个项目,在activity_main.xml布局文件中加入ListView控件:
<ListView android:id="@+id/listview_main_activity" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ListView>
2)写listView的子项布局文件main_activity_item.xml,我只添加了一个控件。
<TextView android:id="@+id/text_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="gucheng" android:textSize="40dp"/>
然后新建一个Person类,用来定义数据变量。MainActivity中只用到了private String name;
其他的我留来给ViewPager用。
public class Person{ private String name = "gucheng"; private int age = 0; private String gender = "男"; public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } public void setGender(String gender){ this.gender = gender; } public String getGender(){ return gender; }}
3)写ListView的适配器:PersionMainAdapter.java,很简单,我前面的博客也有介绍。
这里ListView的适配器是继承自ArrayAdapter和ViewPager不一样。
public class PersonMainAdapter extends ArrayAdapter<Person>{ private int resourceId;//子项布局的id //构造函数 public PersonMainAdapter(Context context, int layoutItemId, List<Person> objects){ super(context,layoutItemId,objects); resourceId = layoutItemId; } @Override public View getView(int position,View contentView,ViewGroup parent){ Person person = getItem(position); View view = LayoutInflater.from(getContext()).inflate(resourceId,null); TextView textView = (TextView)view.findViewById(R.id.text_name); textView.setText(person.getName()); return view; }}
4)最后在MainActivity.java实现代码,先来看总代码,下面详细说一下。
public class MainActivity extends AppCompatActivity { private List<Person> personList = new ArrayList<Person>();//存储Person的实例化对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initPersonName();//初始化姓名 PersonMainAdapter personMainAdapter = new PersonMainAdapter(MainActivity.this,R.layout.main_activity_item,personList); ListView listView = (ListView)findViewById(R.id.listview_main_activity); listView.setAdapter(personMainAdapter); //设置listView的点击事件 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // Log.d("---=====---------96", String.valueOf(position)); //这里position就表示的Person实例化对象在personList里面的位置,例如当你点击第2个item的时候,position的值就为1.(因为从0开始计数) int posititonNum = position; Intent intent = new Intent(MainActivity.this,SecondActivity.class); intent.putExtra("extra_positionNum",posititonNum);//给下一个活动传参数positionNum startActivity(intent); //finish(); } }); } private void initPersonName(){ Person person1 = new Person(); person1.setName("gucheng"); personList.add(person1); Person person2 = new Person(); person2.setName("myEgg"); personList.add(person2); }}
这里,在ListView的点击事件里面,用Intent给下一个活动传递参数。使用函数putExtra(),函数里面有两个参数。第一个参数是作为一个key,给下一个活动当做一个钥匙来获取传递的数据。第二个参数才是传递的数据。
//设置listView的点击事件 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //这里position就表示的Person实例化对象在personList里面的位置,例如当你点击第2个item的时候,position的值就为1.(因为从0开始计数) int posititonNum = position; Intent intent = new Intent(MainActivity.this,SecondActivity.class); intent.putExtra("extra_positionNum",posititonNum); startActivity(intent);
二、关于怎么自定义ViewPAger适配器,在我上一篇博客里面:
http://blog.csdn.net/mygfz/article/details/53512490
1)在activity_second.xml中添加ViewPager控件:
<android.support.v4.view.ViewPager android:id="@+id/view_pager_second_activity" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v4.view.ViewPager>
2)写适配器子项布局second_activity_item.xml,只有两个控件。
<TextView android:id="@+id/text_age" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text_gender" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp"/>
3)自定义适配器PersonSecondAdapter.java:
public class PersonSecondAdapter extends PagerAdapter{ private List<View>viewList; private Activity activity; //构造函数 public PersonSecondAdapter(Activity activity, List<View> viewList){ this.activity = activity; this.viewList = viewList; } @Override public boolean isViewFromObject(View arg0,Object object){//view是否来自对象 return arg0 == object; } @Override public void destroyItem(ViewGroup container, int itemPosition,Object object){//销毁当前页卡 container.removeView(viewList.get(itemPosition));//viewList是存放view的数据结构 } @Override//获取当前页卡数量 public int getCount(){ if(viewList != null){ return viewList.size(); } return 0; } @Override//初始化Position位置的界面 public Object instantiateItem(ViewGroup container,int itemPosition){//实例化当前页卡 container.addView(viewList.get(itemPosition));//把我刚刚新建的view传进去 return viewList.get(itemPosition); }}
4)SecondActivity.java添加代码。其中两个活动共用了一个Person类。
public class SecondActivity extends AppCompatActivity { private List<View> viewList= new ArrayList<View>();//用来装适配器的资源 private ViewPager viewPager;//实例 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second);//接收Intent从上一个活动传递过来的数据 Intent intent = getIntent(); int positionNum = intent.getIntExtra("extra_positionNum",0); initPerson();//初始化viewList PersonSecondAdapter myAdapter = new PersonSecondAdapter(SecondActivity.this,viewList); ViewPager myViewPager = (ViewPager)findViewById(R.id.view_pager_second_activity); myViewPager.setAdapter(myAdapter); try { Field field = myViewPager.getClass().getField("mCurItem"); field.setAccessible(true); field.setInt(myViewPager,positionNum); }catch (Exception e){ e.printStackTrace(); } myAdapter.notifyDataSetChanged(); myViewPager.setCurrentItem(positionNum); } public void initPerson(){//给viewList添加数据 Person person1 = new Person(); View view1 = null; person1.setAge(100); person1.setGender("男"); viewList.add(setViewListData(view1,person1)); Person person2 = new Person(); View view2 = null; person2.setAge(19); person2.setGender("girl"); viewList.add(setViewListData(view2,person2)); } //实现把person里面的数据添加到viewList里面 public View setViewListData(View view,Person person){ view = LayoutInflater.from(SecondActivity.this).inflate(R.layout.second_activity_item,null);//把子项布局加载到view里面 TextView text1 = (TextView) view.findViewById(R.id.text_age); TextView text2 = (TextView) view.findViewById(R.id.text_gender); text1.setText(String.valueOf(person.getAge())); text2.setText(person.getGender()); return view; }}
其中接收Intent从上一个活动传递过来的数据,传递过来的是int类型就用getIntExtra()函数,该函数的第二个参数是设置初始的页面。
传递的是String类型就用getStringExtra(),以此类推。
//接收Intent从上一个活动传递过来的数据 Intent intent = getIntent(); int positionNum = intent.getIntExtra("extra_positionNum",0);
然后是设置ViewPager跳转到特定的界面,一般用setCurrentItem()函数。
myViewPager.setCurrentItem(positionNum);//positionNum就是你想要跳转的页面位置序号
以上。
欢迎交流。
- Android学习 (二十四) 实现ListView跳转到对应页面的ViewPager
- Android学习 (二十五) ViewPager实现跳转到特定界面
- Android listView中点击item或Item中控件跳转对应的详情页面的实现(商品详情查看)
- 学习淘淘商城第四十四课(首页跳转到搜索页面及搜索实现分析)
- TabLayout新闻列表和SlidingMenu侧拉菜单ListView点击Item跳转到主界面ViewPager对应页面
- android 学习随笔十四(页面跳转与数据传递)
- Android学习 (二十二) ViewPager滑动的页面状态
- 跳转到指定的viewpager页面
- Android中点击ViewPager实现跳转页面
- Android学习-Intent实现页面的跳转
- Android切换页面效果的实现二:WebView+ViewPager
- Android切换页面效果的实现二:WebView+ViewPager
- 实现淘宝商品详情页面的viewPager滑动到最后一张图片跳转的功能
- Android学习笔记二十四之ListView列表视图二
- Android学习笔记二十四之ListView列表视图二
- android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能
- Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能
- 点击Viewflipper图片跳转到对应的页面代码
- Can't allocate space for object 'syslogs' in database:Sybase
- 树莓派更改默认GB按键
- centos 安装 docker
- Spring的IOC原理
- Java I/O底层是如何工作的?
- Android学习 (二十四) 实现ListView跳转到对应页面的ViewPager
- win101如何禁止开机自启动程序
- mysql常用函数整理
- iOS 持续集成系列 - 自动化 Code Review
- CPU利用率的计算
- 使用jdom将String类型的xml字符串转成xml
- 数据库SQL优化
- [实用理论] 互联网广告的产业链:广告主(advertiser),媒体(publisher),广告商(agency)
- 关于优酷开放SDK之setOnCurrentPositionUpdateListener