ViewPager 嵌套 ListView实现简单动态滑动

本人初学者,第一次写博文,谢谢大家交流学习。

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





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值