博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过向viewpage中添加listview来完成滑动效果(类似于qq滑动界面) android开发
阅读量:4602 次
发布时间:2019-06-09

本文共 5744 字,大约阅读时间需要 19 分钟。

文件名:page.xml 
文件名:listviewitem.xml 

以上的第二个布局文件 只提供给simpleAdapter 

package com.example.learnpager2;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.view.ViewParent;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ListView;import android.widget.RelativeLayout;import android.widget.SimpleAdapter;public class PagerActivity extends Activity {    ViewPager viewPager;    ArrayList
pagesArrayList;// 添加listview 然后传给MyPagerAdapter 充当媒介 String[] strs; String[] strs2; ListView listView; Button button1; Button button2; Button button3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pager); iniParams(); iniViews(); } private void iniParams(){ pagesArrayList=new ArrayList
(); strs=new String[]{"a","b","c","a","b","c","a","b","c"}; strs2=new String[]{"1","2","3","1","2","3","1","2","3"}; } private void iniViews(){ viewPager=(ViewPager)findViewById(R.id.viewPager); //第一个页面的viewpager第1个page里的listview LayoutInflater layoutInflater=getLayoutInflater(); listView=(ListView) (layoutInflater.inflate(R.layout.page,null).findViewById(R.id.listview)); ArrayAdapter
arrrayAdapter=new ArrayAdapter
(this,android.R.layout.simple_list_item_1,strs); listView.setAdapter(arrrayAdapter); pagesArrayList.add(listView); //第个页面的viewpager第2个page里的listview listView=(ListView) (layoutInflater.inflate(R.layout.page,null).findViewById(R.id.listview)); ArrayAdapter
arrrayAdapter2=new ArrayAdapter
(this,android.R.layout.simple_list_item_1,strs2); listView.setAdapter(arrrayAdapter2); pagesArrayList.add(listView); //第三个面的viewpager第3个page里的listview SimpleAdapter simpleAdapter3=new SimpleAdapter(this,getDatasForListView(), R.layout.listviewitem,new String[]{"title","image"},new int[]{R.id.textView,R.id.imageView}); listView=(ListView) (layoutInflater.inflate(R.layout.page, null).findViewById(R.id.listview)); listView.setAdapter(simpleAdapter3); pagesArrayList.add(listView); viewPager.setAdapter(new MyPagerAdapter(pagesArrayList)); viewPager.setOnPageChangeListener(new MyOnPageChangeListener()); viewPager.setCurrentItem(0); button1=(Button)findViewById(R.id.button1); button2=(Button)findViewById(R.id.button2); button3=(Button)findViewById(R.id.button3); } public List
> getDatasForListView(){ Log.e("3", ""); List
> listMaps=new ArrayList
>(); String[] strings=new String[]{"图片1","图片2","图片3"}; int[] images=new int[]{R.drawable.p1,R.drawable.p1,R.drawable.p1}; for(int i=0;i
generate(Object[] obj){ Map
map=new HashMap
(); map.put("title", obj[0]); map.put("image",obj[1]); return map; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.pager, menu); return true; } public class MyPagerAdapter extends PagerAdapter { public List
mListViews; public MyPagerAdapter(List
mListViews) { this.mListViews = mListViews; } @Override public void destroyItem(View arg0, int arg1, Object arg2) { Log.d("destroyItem", ""+arg0+" "+arg1); ((ViewPager) arg0).removeView(mListViews.get(arg1)); } @Override public int getCount() { return mListViews.size(); } @Override public Object instantiateItem(View arg0, int arg1) { Log.d("instantiateItem", ""+arg0+" "+arg1); try { if(mListViews.get(arg1).getParent()==null) ((ViewPager) arg0).addView(mListViews.get(arg1), 0); else{ // 很难理解新添加进来的view会自动绑定一个父类,由于一个儿子view不能与两个父类相关,所以得解绑 //不这样做否则会产生 viewpager java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.// 还有一种方法是viewPager.setOffscreenPageLimit(3); 这种方法不用判断parent 是不是已经存在,但多余的listview不能被destroy ((ViewGroup)mListViews.get(arg1).getParent()).removeView(mListViews.get(arg1)); ((ViewPager) arg0).addView(mListViews.get(arg1), 0); } } catch (Exception e) { // TODO Auto-generated catch block Log.d("parent=", ""+mListViews.get(arg1).getParent()); e.printStackTrace(); } return mListViews.get(arg1); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View arg0) { } } class MyOnPageChangeListener implements OnPageChangeListener{ @Override public void onPageScrollStateChanged (int state){ // TODO Auto-generated method stub } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // TODO Auto-generated method stub } Color preColor; @Override public void onPageSelected(int position) { // TODO Auto-generated method stub Log.d("page", "pos="+position); switch(position) { case 0: //button1.setBackgroundColor(0x00FF00);break; case 1:// button1.setBackgroundColor(0xFF0000);break; case 2: } } }}

 

  

转载于:https://www.cnblogs.com/keepthinker/archive/2013/04/30/3052451.html

你可能感兴趣的文章
(文件过多时)删除目录下全部文件
查看>>
T-SQL函数总结
查看>>
python 序列:列表
查看>>
web移动端
查看>>
pythonchallenge闯关 第13题
查看>>
linux上很方便的上传下载文件工具rz和sz使用介绍
查看>>
React之特点及常见用法
查看>>
【WEB前端经验之谈】时间一年半,或沉淀、或从零开始。
查看>>
优云软件助阵GOPS·2017全球运维大会北京站
查看>>
linux 装mysql的方法和步骤
查看>>
poj3667(线段树区间合并&区间查询)
查看>>
51nod1241(连续上升子序列)
查看>>
SqlSerch 查找不到数据
查看>>
集合相关概念
查看>>
Memcache 统计分析!
查看>>
(Python第四天)字符串
查看>>
个人介绍
查看>>
使用python动态特性时,让pycharm自动补全
查看>>
MySQL数据库免安装版配置
查看>>
你必知必会的SQL面试题
查看>>