ViewPager中使用自定义的ListView实例
这篇内容是上一篇的延续,因为在上一篇的测试ViewPager成功了,才能实现这一篇的和ListView合在一起使用
效果图如下:
不愿意说理论,直接上代码
1.清单文件 activity_main.xml内容如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <android.support.v4.view.ViewPager
- android:id="@+id/viewPager"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <android.support.v4.view.PagerTabStrip
- android:id="@+id/pagerTabStrip"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </android.support.v4.view.ViewPager>
- </LinearLayout>
2.主类代码MainActivity.java如下
- package com.zyf.android.filemanage;
- import java.io.File;
- import java.util.ArrayList;
- import com.zyf.android.adapter.MyListViewAdapter;
- import com.zyf.android.adapter.MyPagerAdapter;
- import com.zyf.androidfilemanage.R;
- import android.app.Activity;
- import android.os.Bundle;
- import android.support.v4.view.ViewPager;
- import android.view.Menu;
- import android.view.View;
- import android.widget.ListView;
- public class MainActivity extends Activity {
- private ArrayList<View> views;
- private ArrayList<File> files;
- //private ArrayList<>
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ViewPager viewPager = (ViewPager)findViewById(R.id.viewPager);
- views = new ArrayList<View>();
- View view0 =getLayoutInflater().inflate(R.layout.vp_phone, null);
- View view1 =getLayoutInflater().inflate(R.layout.vp_phone, null);
- View view2 =getLayoutInflater().inflate(R.layout.vp_phone, null);
- views.add(view0);
- views.add(view1);
- views.add(view2);
- viewPager.setAdapter(new MyPagerAdapter(views));
- files = new ArrayList<File>();
- files.add(new File("第一个文件"));
- files.add(new File("第二个文件"));
- files.add(new File("第三个文件"));
- files.add(new File("第四个文件"));
- ListView listView = (ListView)(view0.findViewById(R.id.listview_phone));
- listView.setVisibility(ListView.VISIBLE);
- listView.setAdapter(new MyListViewAdapter(files,getLayoutInflater()));
- }
- }
3.ViewPager的适配器MyPagerAdapter.java代码如下:
- package com.zyf.android.adapter;
- import java.util.ArrayList;
- import android.support.v4.view.PagerAdapter;
- import android.view.View;
- import android.view.ViewGroup;
- public class MyPagerAdapter extends PagerAdapter {
- private ArrayList<View> views;
- private String[] pagerTabStrip={"手机","存储卡","云端"};
- public MyPagerAdapter(ArrayList<View> views) {
- // TODO Auto-generated constructor stub
- this.views =views;
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return views == null ? 0 :views.size();
- }
- @Override
- public boolean isViewFromObject(View arg0, Object arg1) {
- // TODO Auto-generated method stub
- return arg0 == arg1;
- }
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- // TODO Auto-generated method stub
- //super.destroyItem(container, position, object);
- container.removeView(views.get(position));
- }
- @Override
- public CharSequence getPageTitle(int position) {
- // TODO Auto-generated method stub
- return pagerTabStrip[position];
- }
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- // TODO Auto-generated method stub
- View view = views.get(position);
- container.addView(view);
- return view;
- }
- }
4.子view对应的ListView的vp_phone.xml代码如下
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <ListView
- android:id="@+id/listview_phone"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- >
- </ListView>
- </LinearLayout>
4.ListView的适配器MyListViewAdapter.java代码如下:
- package com.zyf.android.adapter;
- import java.io.File;
- import java.util.ArrayList;
- import com.zyf.android.util.LogUtil;
- import com.zyf.androidfilemanage.R;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.TextView;
- public class MyListViewAdapter extends BaseAdapter{
- private ArrayList<File> files ;
- private LayoutInflater layoutInflater;
- public MyListViewAdapter(ArrayList<File> files, LayoutInflater layoutInflater) {
- super();
- this.files = files;
- this.layoutInflater =layoutInflater;
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return files.size();
- }
- @Override
- public Object getItem(int arg0) {
- // TODO Auto-generated method stub
- return files.get(arg0);
- }
- @Override
- public long getItemId(int arg0) {
- // TODO Auto-generated method stub
- return arg0;
- }
- @Override
- public View getView(int arg0, View arg1, ViewGroup arg2) {
- File file =files.get(arg0);
- String filename = file.getName();
- int icon = R.drawable.icon;
- HoldView holdView = null;
- if (arg1 == null){
- arg1 = layoutInflater.inflate(R.layout.item_file, null);
- holdView = new HoldView(arg1);
- arg1.setTag(holdView);
- }else{
- holdView = (HoldView)arg1.getTag();
- }
- holdView.getIv_con().setImageResource(icon);
- holdView.getTx_name().setText(filename);
- return arg1;
- }
- private class HoldView{
- ImageView iv_con;
- TextView tx_name;
- public HoldView(View view) {
- iv_con = (ImageView)view.findViewById(R.id.item_file_imageview);
- tx_name = (TextView)view.findViewById(R.id.item_file_name);
- }
- public ImageView getIv_con() {
- return iv_con;
- }
- public TextView getTx_name() {
- return tx_name;
- }
- }
- }
6.ListView中的每个条目的资源文件item_file.xml如下:
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/item_file_imageview"
- />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@id/item_file_imageview"
- android:id="@+id/item_file_name"
- />
- </RelativeLayout>
总结,整体比较简单,就是ViewPager需要自己写适配器,同时ListView也是自己写的适配器,然后把两者整合到一起(就是从ViewPager中拿到ListView对应的view就可以了)
ViewPager中使用自定义的ListView实例的更多相关文章
- ViewPager中的子Activity无法响应OnActivityResult的解决方法
ViewPager子Activity通过startActivityForResult()跳转至OtherActivity,OtherActivity回传结果由ViewPager所在的父Activity ...
- 向 ViewPager 中添加 包含 ListView 的 Fragment
对与fragment就不说什么了,直接看API手册吧,亲. 向 ViewPager 中添加 包含 ListView 的 Fragment 的过程比较麻烦.他所表现的效果就是新闻客户端的滑动翻页效果. ...
- Android中制作自定义dialog对话框的实例
http://www.jb51.net/article/83319.htm 这篇文章主要介绍了Android中制作自定义dialog对话框的实例分享,安卓自带的Dialog显然不够用,因而我们要继 ...
- JS中new的自定义实现创建实例对象
我们都知道在JS中通常通过对象字面量和new关键字来创建对象,那么今天我就来给大家讲讲new是怎么创建实例对象的:首先创建一个构造函数: function Person(name,age){ this ...
- android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题
android 在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法: 原来代码: @Overrid ...
- android内部培训视频_第三节(3)_常用控件(ViewPager、日期时间相关、ListView)
第三节(2):常用控件之ViewPager.日期时间相关.ListView 一.ViewPager 实例:结合PagerAdapter滑动切换图片 二.日期时间相关:AnalogClock\Dig ...
- [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)
接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...
- 自定义一个ListView实现聊天界面
摘要 ListView可以称得上Android中最常用也最难用的控件了,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示 ...
- Android开发之自定义的ListView(UITableViewController)
Android开发中的ListView, 顾名方法思义,就是表视图.表示图在iOS开发中就是TableView.两者虽然名称不一样,但是其使用方法,使用场景以及该控件的功能都极为相似,都是用来展示大量 ...
随机推荐
- [转]JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
[转] JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 - dreamman的日志 - 网易博客http://blog.163.com/dreamman_yx/blog/st ...
- kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
今天在写kafka生产者生成数据的程序并运行时,报如下错误: log4j:WARN No appenders could be found for logger (kafka.utils.Verifi ...
- 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)
2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...
- POP3、SMTP、IMAP和Exchange的区别在哪里?
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:永遇乐链接:http://www.zhihu.com/question/24605584/answer/29039357来源: ...
- git stash的使用
https://git-scm.com/docs/git-stash 在git svn的时候使用,提交记录的时候,有部分文件的修改不需要commit. 在向svn进行git svn dcommit的时 ...
- USACO3.32Shopping Offers(DP)
五维DP,听着挺多的,貌似就是挺裸的dp, 最近貌似做简单的DP挺顺手..1A dp[i][j][e][o][g] = min(dp[i][j][e][o][g],dp[i-i1][j-i2][e-i ...
- C#下多进程共同读写同一文件
最近遇到这样一个需求,用C#写一个界面,在界面上实时输出一个日志文件. 实时检测文件变化,以便刷新界面显示,可以用FileSystemWatcher组件,响应Changed事件即可. 关键是在Chan ...
- MFC DialogBar 按钮灰色不响应
在MFC单文档加添加DialogBar,然后在DialogBar上添加按钮,会出现如下情况,单击无响应. 解决方案: 在 CSideDialogBar头文件和CPP文件里添加如下函数 afx_msg ...
- yum puppet 并整合控制台
上篇说了下在ubuntu12.04上安装puppet,安装的版本为puppet2.7.11版本,今天尝试了下在CentOS6.4系统上安装puppet 3.1.1版本,本文参考chenshake的文章 ...
- Jackson中的那些坑
不符合驼峰规范的变量 “驼峰命名法”请自行百度.简单的来说就是变量的第一个单词以小写字母开始其他单词首字母大写,或者全部单词首字母都大写,分别称为“小驼峰”和“大驼峰” 比如一个符合驼峰规范命名的实体 ...