java-ViewPager GridView onItemClick
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-ViewPager GridView onItemClick,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3397字,纯文字阅读大概需要5分钟。
内容图文
![java-ViewPager GridView onItemClick](/upload/InfoBanner/zyjiaocheng/676/be5d6b96f1764c13baadefc2e9ce8a75.jpg)
我在ViewPager的布局中有一个GridView(我不确定这是否有所不同).
inside SampleAdapter for ViewPager{
@Override
public Object instantiateItem(ViewGroup container, int position) {
View page = null;
if (position == 0) {
page = getLayoutInflater().inflate(R.layout.layoutone,
container, false);
} else {
page = getLayoutInflater().inflate(R.layout.layouttwo,
container, false);
GridView grid = (GridView) page.findViewById(R.id.gridview);
grid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
//switch to another activity based on click event
}
});
grid.setAdapter(new GridItemAdapter(context)); //sets custom gridItemLayout
container.addView(page);
return (page);
}
}
我可以很好地查看网格.自定义布局也按照我的GridAdapter工作.但是,我的点击事件没有被触发.是否因为调用了InstantiateItem()方法?我该如何解决?
我还不太了解Fragments如何与ViewPager一起使用,因此,如果此解决方案涉及切换到基于Fragment的方法,那么有人可以精雕细琢就太好了.
解决方法:
因此,在ViewPager中单击有点有趣,因为在捕获单击/运动事件时,ViewPager有点贪婪. One solution涉及覆盖ViewPager的ViewGroup.onInterceptTouchEvent(MotionEvent ev).但是,这并不总是必需的.具体来说,我无法在不执行此操作的情况下为传呼器设置onClickListener,但是为传呼器内的视图设置onClickListener对我而言非常合适(我在最后附加了一个代码示例).但是,我从未使用GridView / onItemClickListener完成此操作.实际上,您正在做的是为您的传呼器内的视图(位于下一层)内的视图设置点击侦听器.当您在Android中嵌套事物时,由于系统处理消耗点击的方式,触摸事件的管理变得更加复杂.
您遇到的问题是,某些事件正在消耗您的触摸事件,而没有将其传递给列表项.本质上,Android处理触摸事件的方式是,当发生触摸事件时,会将其传递给顶级视图的触摸事件处理函数.如果视图处理该事件,则返回true,并且系统知道该事件已处理且已完成.如果该视图不想处理该事件,则返回false,然后系统将该事件传递到层次结构中的下一个最高视图.在您的情况下,某个事件(可能是ViewPager或可能是GridView)会在事件未击中您的网格项目之前就将其消耗掉,因此onItemClickListener永远不会被触发.
作为测试,如果可以为GridView设置onClickListener(如在整个视图中)并使其正常工作,则意味着问题不在于ViewPager.在这种情况下,您可能需要实现自己的GridView版本,并覆盖它处理触摸事件的方式,以确保该事件将其传递给子项.但是,如果这不起作用,则如上所述,您将需要覆盖ViewPager.
(注意:显然,这两个解决方案都需要花费大量时间,因此在执行任何一项操作之前,只需确保已仔细检查是否存在任何简单的错误,例如将Listener放在错误的视图上,误读了行为并认为不是触发时等)
作为参考,这是一个有效的InstantiateItem方法的版本(实际上仍在进行中,因此不是100%漂亮). “菜单”视图是LinearLayout.
public Object instantiateItem(View collection, int position) {
LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int page = R.layout.menu_page;
String meal = "";
switch (position) {
case 0:
meal = "Breakfast!";
break;
case 1:
meal = "Lunch!";
break;
case 2:
meal = "Dinner!";
break;
}
View view = inflater.inflate(page, null);
TextView mealTitle = (TextView) view.findViewById(R.id.meal_title);
mealTitle.setText(meal);
((ViewPager) collection).addView(view, 0);
final ViewPager pager = (ViewPager)collection;
View menupage = view.findViewById(R.id.menu_page_ll);
menupage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int page = ((ViewPager) pager).getCurrentItem();
Intent i = new Intent(getApplicationContext(), Menus.class);
i.putExtra("page", page);
startActivity(i);
}
});
return view;
}
内容总结
以上是互联网集市为您收集整理的java-ViewPager GridView onItemClick全部内容,希望文章能够帮你解决java-ViewPager GridView onItemClick所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。