`
吃货吃货
  • 浏览: 32054 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

解决组件与父组件监听冲突问题

阅读更多

解决组件与父组件监听冲突问题

相信大家在做android开发的时候,都会有遇到组件与父组件的监听相互冲突的时候。

举个具体的例子:在游戏详情Activity中使用了一个横向的ListView为了显示图片,但是为了翻阅方便,我们通常会在这个Activity中使用一个ScrollView显示,这样的话,就不用担心文本中信息过长而导致的界面无法显示,虽然这样能够让我们的界面更加美观,但也增加了一个难题,就是在ListView中拖拽时,父组件(也就是ScrollView)也会监听到这样的一个事件,于是当你想拖动ListView时,有可能会没有反应,但是ScrollView却有可能做出相应的反应。其实解决这个问题的关键代码非常简单,只需要一句requestDisallowInterceptTounchEvent();

下面是效果图:

当ListView拖动时:

 

当ScrollView拖动时:



     以下便直接上代码:

主界面代码:

Xml代码 
  1. <span style=""><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context=".MainActivity" >  
  6.   
  7.     <ScrollView  
  8.         android:id="@+id/scrollView"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent" >  
  11.   
  12.         <LinearLayout  
  13.             android:layout_width="match_parent"  
  14.             android:layout_height="wrap_content"  
  15.               
  16.             android:orientation="vertical" >  
  17.               
  18.             <com.example.controls.HorizontalListView  
  19.                 android:id="@+id/HorizontalListView"         
  20.                 android:layout_height="270dp"                 
  21.                 android:layout_width="wrap_content"  
  22.                 android:layout_marginBottom="10dp"  
  23.                 android:layout_marginLeft="10dp"  
  24.                 android:layout_marginRight="10dp"  
  25.                 android:layout_marginTop="10dp" />  
  26.   
  27.             <LinearLayout  
  28.                 android:layout_width="match_parent"  
  29.                 android:layout_height="wrap_content"  
  30.                 android:orientation="vertical"  
  31.                  >  
  32.   
  33.                 <TextView  
  34.                     android:id="@+id/textView2"  
  35.                     android:layout_width="wrap_content"  
  36.                     android:layout_height="wrap_content"  
  37.                     android:layout_marginBottom="10dp"  
  38.                     android:layout_marginLeft="10dp"  
  39.                     android:layout_marginTop="10dp"  
  40.                     android:text="游戏名称:窦豆豆"  
  41.                     android:textSize="24sp" />  
  42.   
  43.                 <TextView  
  44.                     android:id="@+id/textView1"  
  45.                     android:layout_width="wrap_content"  
  46.                     android:layout_height="wrap_content"  
  47.                     android:layout_marginBottom="10dp"  
  48.                     android:layout_marginLeft="10dp"  
  49.                     android:layout_marginTop="10dp"  
  50.                     android:text="游戏大小:24M"  
  51.                     android:textSize="24sp" />  
  52.   
  53.                 <TextView  
  54.                     android:id="@+id/textView3"  
  55.                     android:layout_width="wrap_content"  
  56.                     android:layout_height="wrap_content"  
  57.                     android:layout_marginBottom="10dp"  
  58.                     android:layout_marginLeft="10dp"  
  59.                     android:layout_marginTop="10dp"  
  60.                     android:text="下载次数:500W次"  
  61.                     android:textSize="24sp" />  
  62.   
  63.                 <TextView  
  64.                     android:id="@+id/textView4"  
  65.                     android:layout_width="wrap_content"  
  66.                     android:layout_height="wrap_content"  
  67.                     android:text="游戏简介"  
  68.                     android:layout_marginBottom="10dp"  
  69.                     android:layout_marginLeft="10dp"  
  70.                     android:layout_marginTop="10dp"  
  71.                     android:textSize="24sp" />  
  72.   
  73.                 <TextView  
  74.                     android:id="@+id/textView5"  
  75.                     android:layout_width="wrap_content"  
  76.                     android:layout_height="wrap_content"  
  77.                     android:text="这是一个游戏简介\n这是一个游戏简介\n这是一个游戏简介\n这是一个游戏简介\n"  
  78.                      android:layout_marginBottom="10dp"  
  79.                     android:layout_marginLeft="10dp"  
  80.                     android:layout_marginTop="10dp"  
  81.                     android:textSize="24sp" />  
  82.                   
  83.             </LinearLayout>  
  84.               
  85.         </LinearLayout>  
  86.     </ScrollView>  
  87.   
  88. </LinearLayout>  
  89. </span>  

 这是ListView每个Item的代码

Xml代码 
  1. <span style=""><?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <LinearLayout  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:orientation="vertical" >  
  11.   
  12.         <ImageView  
  13.             android:id="@+id/imageView1"  
  14.             android:layout_width="wrap_content"  
  15.             android:layout_height="wrap_content"  
  16.             android:layout_gravity="center"  
  17.             android:layout_margin="10dp"  
  18.             android:src="@drawable/ic_launcher" />  
  19.   
  20.     </LinearLayout>  
  21.   
  22. </LinearLayout>  
  23. </span>  

     主界面java代码:

Java代码 
  1. <span style="">package com.example.listviewdemo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.view.LayoutInflater;  
  9. import android.view.Menu;  
  10. import android.view.MotionEvent;  
  11. import android.view.View;  
  12. import android.view.View.OnTouchListener;  
  13. import android.view.ViewGroup;  
  14. import android.widget.BaseAdapter;  
  15. import android.widget.ImageView;  
  16. import android.widget.ScrollView;  
  17.   
  18. import com.example.controls.HorizontalListView;  
  19.   
  20. public class MainActivity extends Activity {  
  21.       
  22.     private ScrollView scrollView;  
  23.     private HorizontalListView horizontalListView;  
  24.     private List<Integer> list = new ArrayList<Integer>();  
  25.       
  26.     @Override  
  27.     protected void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.activity_main);  
  30.           
  31.         scrollView = (ScrollView) findViewById(R.id.scrollView);  
  32.         horizontalListView = (HorizontalListView) findViewById(R.id.HorizontalListView);  
  33.         horizontalListView.setOnTouchListener(new OnTouchListener() {             
  34.             @Override  
  35.             public boolean onTouch(View arg0, MotionEvent event) {  
  36.                 // TODO Auto-generated method stub  
  37.                 if (event.getAction() == MotionEvent.ACTION_UP) {  
  38.                     scrollView.requestDisallowInterceptTouchEvent(false);  
  39.                 } else {  
  40.                     scrollView.requestDisallowInterceptTouchEvent(true);  
  41.                 }  
  42.                 return false;  
  43.             }  
  44.         });  
  45.         setImageView(horizontalListView);  
  46.     }  
  47.   
  48.     @Override  
  49.     public boolean onCreateOptionsMenu(Menu menu) {  
  50.         // Inflate the menu; this adds items to the action bar if it is present.  
  51.         getMenuInflater().inflate(R.menu.main, menu);  
  52.         return true;  
  53.     }  
  54.       
  55.     private void setImageView(HorizontalListView horizontalListView){  
  56.         list.add(R.drawable.pic_game);  
  57.         list.add(R.drawable.pic_game);  
  58.         list.add(R.drawable.pic_game);  
  59.         horizontalListView.setAdapter(new MyAdapter(list, getLayoutInflater()));  
  60.     }  
  61.       
  62.     protected class MyAdapter extends BaseAdapter{  
  63.           
  64.         private List<Integer> list;  
  65.         private LayoutInflater layoutInflater;  
  66.           
  67.         public MyAdapter(List<Integer> list,LayoutInflater layoutInflater){  
  68.             this.list = list;  
  69.             this.layoutInflater = layoutInflater;  
  70.         }  
  71.           
  72.         @Override  
  73.         public int getCount() {  
  74.             // TODO Auto-generated method stub  
  75.             return list.size();  
  76.         }  
  77.   
  78.         @Override  
  79.         public Object getItem(int arg0) {  
  80.             // TODO Auto-generated method stub  
  81.             return list.get(arg0);  
  82.         }  
  83.   
  84.         @Override  
  85.         public long getItemId(int arg0) {  
  86.             // TODO Auto-generated method stub  
  87.             return arg0;  
  88.         }  
  89.   
  90.         @Override  
  91.         public View getView(int arg0, View arg1, ViewGroup arg2) {  
  92.             // TODO Auto-generated method stub  
  93.             int image = list.get(arg0);  
  94.             View view = layoutInflater.inflate(R.layout.item, null);  
  95.             ImageView iv = (ImageView) view.findViewById(R.id.imageView1);  
  96.             iv.setImageResource(image);  
  97.             return view;  
  98.         }  
  99.           
  100.     }  
  101.   
  102. }  
  103. </span>  
  • 大小: 238.5 KB
  • 大小: 212.5 KB
0
1
分享到:
评论

相关推荐

    前端html5框架ZUI1.2版

    3、重新实现的模态框触发器,模态框触发器同时支持加载远程内容和实时内容,实时根据自身内容调整位置和尺寸,重新设计了调用接口,使用更加方便,消除了模态框触发器于一般模态框发生冲突的隐患 4、package.json...

    吞吃蛇游戏

    例如菜单选项用JMenu实现会和Canvas 组件界面冲突;所以我用Menu实现,但是没能实现像JMenu那样对菜单首选项进行监听。还有对蛇吃苹果的声音加载与SnakeModel冲突,没能实现。对苹果与蛇的形状设计也不是很满意,当...

    手机卫士防盗模块

    手机卫士防盗模块,让你更加了解,并且会使用四大组件,和他们之间相辅相成的关系,以及版本进入软件版本更新等逻辑,安装Apk时签名冲突解决。Md5加密,监听手机开机广播,检测sim序列号变化。读取联系人等。对于初学...

    vue语法.rar

    用来作为属性名,能保证不会与其他的属性名冲突 1.它是通过Symbol函数生成的 2.它的前面不能用new,因为它生成的是一个原始类型的数据,不是对象 3.它可以接受一个参数,为了便于区别。及时长的一样他们也不同 4...

    Java2核心技术.part5

    12.5.3保存对象引用问题的解决 12.5.4理解对象引用的输出格式 12.5.5修改默认的序列化机制 12.5.6单元素与类型安全枚举的序列化 12.5.7版本 12.5.8使用序列化进行克隆 12.6文件管理 12.7新的I...

    Java2核心技术.part3

    12.5.3保存对象引用问题的解决 12.5.4理解对象引用的输出格式 12.5.5修改默认的序列化机制 12.5.6单元素与类型安全枚举的序列化 12.5.7版本 12.5.8使用序列化进行克隆 12.6文件管理 12.7新的I...

    Java2核心技术.part1

    12.5.3保存对象引用问题的解决 12.5.4理解对象引用的输出格式 12.5.5修改默认的序列化机制 12.5.6单元素与类型安全枚举的序列化 12.5.7版本 12.5.8使用序列化进行克隆 12.6文件管理 12.7新的I/O ...

    Java2核心技术.part6

    12.5.3保存对象引用问题的解决 12.5.4理解对象引用的输出格式 12.5.5修改默认的序列化机制 12.5.6单元素与类型安全枚举的序列化 12.5.7版本 12.5.8使用序列化进行克隆 12.6文件管理 12.7新的I...

    Java2核心技术.part4

    12.5.3保存对象引用问题的解决 12.5.4理解对象引用的输出格式 12.5.5修改默认的序列化机制 12.5.6单元素与类型安全枚举的序列化 12.5.7版本 12.5.8使用序列化进行克隆 12.6文件管理 12.7新的I...

    Java2核心技术.part2

    12.5.3保存对象引用问题的解决 12.5.4理解对象引用的输出格式 12.5.5修改默认的序列化机制 12.5.6单元素与类型安全枚举的序列化 12.5.7版本 12.5.8使用序列化进行克隆 12.6文件管理 12.7新的I...

    membrane-monitor-1.1.2 三件套.rar

    包含了Membrane-monitor的全部的组件(三个),使用方法是(1)运行Membrane-monitor,选择Membrane-&gt;Add Rule(2)选中Simple Forwarding Rule,点击Next(3)Listen Port填写监听端口,只要不和应用服务端口冲突即可...

    详细介绍解决vue和jsp结合的方法

    首先,vue-cli基于node监听端口进行调试,也就是Localhost:8080,但同时tomcat监听的端口也是8080,我选择把tomcat的端口改成8081来防止两者冲突。(改端口的方法一搜一大把) 这个api中的地址(因为是8080向8081...

    Android插件框架Android-Plugin-Framework.zip

    11、解决资源id冲突问题。尝试做过插件开发的同学应该都遇到,插件资源id和宿主程序资源id可能相同,导致获取的资源不是想要的资源。 此问题其实在android提供的编译器aapt中早已提供了支持。 12、需要关注...

    oracle数据库dba管理手册

    4.3 如何解决磁盘不足问题 69 4.4 解决方案 70 4.4.1 小型开发数据库设计 70 4.4.2 产品OLTP数据库设计 70 4.4.3 具有历史数据的产品OLTP数据库 设计 71 4.4.4 数据仓库设计 72 4.5 文件位置 75 4.6 数据库空间使用...

    nServer-v2.1023[FTP + MYSQL + HTTP + PHP(FCGI)]

    - 更改目录.default为a.default,解决特定情况无法读取目录的问题 2012年04月05日 - 解决MySQL远程访问慢的问题 2012年03月30日 - 更新Nginx版本为1.0.14 2012年03月20日 - 优化PHP配置 - 优化Nginx配置 2012年...

    oracle10g课堂练习I(2)

    使用 SQL 解决锁定冲突 8-30 死锁 8-31 小结 8-32 练习概览:管理数据和并发处理 8-33 9 管理还原数据 课程目标 9-2 数据操纵 9-3 还原数据 9-4 事务处理和还原数据 9-6 存储还原信息 9-7 还原数据与...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    3.5.3 滑动冲突的解决方式 157 第4章 View的工作原理 174 4.1 初识ViewRoot和DecorView 174 4.2 理解MeasureSpec 177 4.2.1 MeasureSpec 177 4.2.2 MeasureSpec和LayoutParams的对应关系 178 4.3 View的工作...

    Java语言基础下载

    使用前缀解决命名冲突问题 371 使用命名空间 371 命名空间属性 372 统一资源标识符 372 默认的命名空间 372 使用命名空间 373 XML 文档规则 374 XML Schema 379 Schema和DTD的区别: 380 Schema的数据类型 380 样式...

    用Git子模块和DockerCompose实现高效开发工作流

    搭建开发环境一直让程序员们头疼,本文使用Git子模块和Docker Compose实现高效率的开发工作流,让程序员能够轻松搭建出开发环境,把精力...本地配置冲突:监听端口、数据库配置等此外,就我个人经验而言,我们这样的程

Global site tag (gtag.js) - Google Analytics