ViewPager 嵌套 ListView实现简单动态滑动
2016-05-20 09:04
411 查看
本人初学者,第一次写博文,谢谢大家交流学习。
ViewPager 嵌套
ListView实现简单动态滑动
最近在编写一个简单的游戏物品栏,需要用到左右滑动切换页面,并且每页还要有gridview作存放物品的格子,出屏后需要上下滑动;
一下用listView简单说明
发现ViewPager 嵌套 ListView后超过两页就报错。主要代码如下:
平常写静态页面时都还好,为什么加入动态页面就只能滑动两页,第三页就报错。
事后查阅资料发现:加载页面时,事先系统会加载好前两个页面,第三页加载时,会继续调用此方法。
所以错误根源出现在这里,更改后为:
http://www.tuicool.com/articles/NZFFZz
参照此页代码。
更改后程序运行正常,主要是需要用GetParent返回包含这个窗口的窗口Handle。
ViewPager 嵌套
ListView实现简单动态滑动
最近在编写一个简单的游戏物品栏,需要用到左右滑动切换页面,并且每页还要有gridview作存放物品的格子,出屏后需要上下滑动;
一下用listView简单说明
发现ViewPager 嵌套 ListView后超过两页就报错。主要代码如下:
public class MainActivity extends Activity { private List<View> views; private ViewPager vpGuide; private ListView listView; private int i = 0; private ListviewAdaper listviewadaper; private String[] strings; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initGuideViews(); } private void initGuideViews() { vpGuide = (ViewPager) findViewById(R.id.vwpg); views = new ArrayList<View>(); LayoutInflater inflater = LayoutInflater.from(MainActivity.this); /****************************/ for (i = 0; i < 3; i++) { strings = new String[] { "苹果", "香蕉", "樱桃", "葡萄", "芒果", "梨", "橘子", "苹果", "香蕉", "樱桃", "葡萄", "芒果", "梨", "橘子", "苹果", "香蕉", "樱桃", "葡萄", "芒果", "梨", "橘子", "苹果", "香蕉", "樱桃", "葡萄", "芒果", "梨", "橘子" }; listView = (ListView) (inflater.inflate(R.layout.activity_listview, null)).findViewById(R.id.listView); listviewadaper = new ListviewAdaper(MainActivity.this, R.layout.listview_ltem, strings); listView.setAdapter(listviewadaper); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Toast.makeText(MainActivity.this, strings[arg2], Toast.LENGTH_LONG).show(); // TODO Auto-generated method stub } }); views.add(listView); } /****************************/ MainpagerAdapter mainpageradapter = new MainpagerAdapter(views); vpGuide.setAdapter(mainpageradapter); // TODO Auto-generated method stub } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }其实本身以上代码是没有错误,错误指向:继承PagerAdapter适配器的类的加载页面的方法instantiateItem()
public Object instantiateItem(ViewGroup container, int position) { container.addView(views.get(position), 0); return views.get(position); }
平常写静态页面时都还好,为什么加入动态页面就只能滑动两页,第三页就报错。
事后查阅资料发现:加载页面时,事先系统会加载好前两个页面,第三页加载时,会继续调用此方法。
所以错误根源出现在这里,更改后为:
public Object instantiateItem(ViewGroup container, int position) { try { if(views.get(position).getParent()==null) ((ViewPager) container).addView(views.get(position), 0); else{ ((ViewGroup)views.get(position).getParent()).removeView(views.get(position)); ((ViewPager) container).addView(views.get(position), 0); } } catch (Exception e) { e.printStackTrace(); } return views.get(position); }
http://www.tuicool.com/articles/NZFFZz
参照此页代码。
更改后程序运行正常,主要是需要用GetParent返回包含这个窗口的窗口Handle。
相关文章推荐
- java学习笔记5.20
- Kubernetes系统架构简介--转
- weblogic设置多大内存比较好?
- Auto inspection lot creation and Auto Usage decision for required parts
- centos6.5 64bit 实现root开机自动登录X桌面
- Myeclipse在线集成svn
- thinkphp3.x中session方法的用法分析
- Android学习笔记三十四:android 线程 wait notify
- mysql字符集修改
- CSS3中REM使用详解
- 统计一个数据库中,无记录的表的sql语句
- 侦听Android手机ServiceState
- 漫谈递归——递归的思想
- 项目中加入activiti后,用户权限管理处理的三种方式
- awk 中 FS的用法
- 各种服务启动命令
- 浅析JavaScript Array和string的转换(推荐)
- MySQL PHP 语法
- hdu 2844 多重背包 (模版题)
- myeclipse10破解后,导出war包时报“SECURITY ALERT: INTEGERITY CHECK ERROR”进行了破解