您的位置:首页 > 其它

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

2016-05-20 09:04 411 查看
本人初学者,第一次写博文,谢谢大家交流学习。

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: