热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ScrollView和ListView冲突解决

直接上代码来的直接点吧……packagecom.zhuo.scrollview_listview;importjava.util.ArrayList;import


直接上代码来的直接点吧……



package com.zhuo.scrollview_listview;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ScrollView;

public class MainActivity extends Activity {

 private ListView listView;
 private ScrollView scrollView;
 private ArrayAdapter adapter;

 /**
  * 标记:ListView中的Item是否滑动到底端.
  */
 private boolean isListViewMoveToBottom = false;
 /**
  * 表示是否可以滑动ScrollView.(当 isListViewMoveToBottom = true,分发事件给它滑动ScrollView.)
  */
 private boolean isScrollViewMoved = false;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  scrollView = (ScrollView) this.findViewById(R.id.scrollView);
  listView = (ListView) this.findViewById(R.id.listview);

  adapter = new ArrayAdapter(this,
    android.R.layout.simple_list_item_1, getData());
  listView.setAdapter(adapter);
  listView.setOnScrollListener(new OnScrollListener() {

   @Override
   public void onScrollStateChanged(AbsListView view, int scrollState) {

    // 表示用户将ListView中的Item滑动到底端.

    switch (scrollState) {
    // the user is scrolling using touch,and their finger is still
    // on the screen.
    case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:

     break;
    // the view is not scrolling .
    case 0:
     if (isListViewMoveToBottom) {
      // 表示ScrollView可以获取滑动事件.
      isScrollViewMoved = true;
     } else {
      isScrollViewMoved = false;
     }
     break;
    }
   }

   @Override
   public void onScroll(AbsListView view, int firstVisibleItem,
     int visibleItemCount, int totalItemCount) {

    if ((firstVisibleItem + visibleItemCount) == totalItemCount) {
     // 表示ListView中所有Item已经滑动到ListView的底端.(在向同一个方向滑动,则应该ScrollView滑动.)
     isListViewMoveToBottom = true;

    } else {
     isListViewMoveToBottom = false;
    }
   }
  });
 }

 private ArrayList getData() {
  ArrayList dataArrayList = new ArrayList();
  for (int i = 0; i <30; i++) {
   dataArrayList.add("xxx:" + i);
  }
  return dataArrayList;
 }

 @Override
 public boolean dispatchTouchEvent(MotionEvent ev) {
  if (ev.getAction() == MotionEvent.ACTION_MOVE) {
   // 想让哪个控件先执行,直接调用。

   if (isScrollViewMoved) {
    // 将滑动事件分发给ScrollView.
    scrollView.dispatchTouchEvent(ev);
    // 释放到ScrollView获取的事件.(否则,会覆盖其子控件View的相同事件.)
    isScrollViewMoved = false;
   } else {
    // 分发事件给ListView,让点击ListView的时候,其可以滑动。
    listView.dispatchTouchEvent(ev);

   }
  }
  return super.dispatchTouchEvent(ev);
 }
}




布局文件:

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:cOntext="com.zhuo.scrollview_listview.MainActivity" >

            android:id="@+id/scrollView"
        android:layout_
        android:layout_
        android:layout_alignParentTop="true" >

                    android:id="@+id/linear"
            android:layout_
            android:layout_
            android:orientation="vertical" >

                            android:id="@+id/listview"
                android:layout_
                android:layout_ />

           

           

           

           

           

           

           

           

           

           

           

           

           
       
   



推荐阅读
  • Android 开发技巧:使用 AsyncTask 实现后台任务与 UI 交互
    本文详细介绍了如何在 Android 应用中利用 AsyncTask 来执行后台任务,并及时将任务进展反馈给用户界面,提高用户体验。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文详细介绍了如何在Java Swing中使用`JButton.registerKeyboardAction()`方法来为按钮设置键盘快捷键,并提供了多个实用的代码示例。 ... [详细]
  • 本文详细探讨了 Android Service 组件中 onStartCommand 方法的四种不同返回值及其应用场景。Service 可以在后台执行长时间的操作,无需提供用户界面,支持通过启动和绑定两种方式创建。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • Java多线程售票案例分析
    本文通过一个售票系统的实例,深入探讨了Java中的多线程技术及其在资源共享和并发控制中的应用。售票过程涉及查询、收款、找零和出票等多个步骤,其中对总票数的管理尤为关键。 ... [详细]
  • 本文详细探讨了在Windows 98环境下安装Apache 1.3.9、JServ、GNUJSP 1.0、JDK 1.2.2及JSDK 2.0后遇到的中文显示问题,并提供了多种有效的解决方案。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 本文探讨了当尝试通过单击事件多次启动同一线程时,如何避免遇到java.lang.IllegalThreadStateException: Thread already started异常,并提供了两种有效的解决方案。 ... [详细]
author-avatar
树上的女爷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有