ListView中镶嵌GridView实现时间线功能问题总汇

看了网上的时间线,基本都非常的差劲,不如自己写一个,实现的效果如下,在实现的过程中遇到了2个大的问题:1、gridView显示不全2、listview的item不可点击,那么下面写出我解决这两个问题的办法


一、GridView显示不全的问题

GridView 显示不全是因为ListView和GridView都是可以滚动的,在android中不可以在一个可以滚动的控件中镶嵌另一个可以滚动的控件,那么我们可以通过自定义GridView设置为不滚动。

  • MyGridView
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

/**
 * 自定义的GridView对付listview中镶嵌GirdView的情况
 * @author zsl
 * @github https://github.com/yy1300326388
 * @blog http://blog.csdn.net/yy1300326388
 */
public class MyGridView extends GridView {

    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 设置不滚动
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

}
  • XML
<!--使用自定义的MGridView实现ListView当中镶嵌一个GridView的情况  -->
<com.huahuacaocao.flowerpot.view.MyGridView
    android:id="@+id/timeline_gv_update"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:numColumns="4"
    android:scrollbars="none" />
  • 初始化View
MyGridView gv_update = (MyGridView) findViewById(R.id.timeline_gv_update);

二、ListView的Item不可点击

ListView的Item不可点击 的原因是GridView抢占了焦点,那么我们可以不让它抢占焦点,我们在Item中的根节点添加如下属性,设置聚焦点不向下传递。

  • descendantFocusability
android:descendantFocusability="blocksDescendants"
  • 示例(timeline_item.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/app_color"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/timeline_item_tv_report"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/app_marge_10"
        android:text="测试"
        android:textColor="@color/garywrite"
        android:textSize="@dimen/textsize_14" />

    <com.huahuacaocao.flowerpot.view.MyGridView
        android:id="@+id/timeline_gv_update"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:numColumns="4"
        android:scrollbars="none"
        android:verticalSpacing="@dimen/app_marge_5" />

</LinearLayout>

/**
 * --------------
 * 欢迎转载   |  转载请注明
 * --------------
 * @author zsl
 * @github https://github.com/yy1300326388
 * @blog http://blog.csdn.net/yy1300326388
 */
时间: 2024-10-09 02:18:05

ListView中镶嵌GridView实现时间线功能问题总汇的相关文章

只存在于理想中的客户端JavaScript时间线

1.Web浏览器根据URL地址下载文档内容,并创建Document对象,解析WEB页面,HTML元素,包含的文本内容,将这些节点添加到DOM树中.在这个阶段,document.readystate属性的值是 loading. 2.当解析器遇到没有async和defer属性的<script>元素时,它把这个元素添加到DOM树中,并且开始执行其中的JavaScript脚本,这些脚本会被同步执行,并且在下载(通过src属性引用的外部js)和执行的过程中,解析器会暂停.所以在这些脚本中可以使用docu

ListView中嵌套GridView显示不全的解决方法

项目需要,在ListView中显示多张图片,用到了GridView,不过如果使用普通的GridView,Item仅仅只是显示一部分,超出第一行以后的都无法显示了,这个很无语,所以又得继承下GridView重写onMeasure方法去测量子控件的宽高了.. 这里只是贴出自定义GridView的代码,直接在xml中使用,ListView的Adapter中调用即可: public class GridViewForListView extends GridView { public GridViewF

ListView中嵌套GridView时GridView的数据无法完全显示,只显示一行

这种情况下需要自定义一个GridView,然后重写GridView的onMeasure(int widthMeasureSpec, int heightMeasureSpec)的方法,将GridView重新测量,并且指定GridView的新的高度 package com.yuedong.mobi.view; import android.content.Context; import android.util.AttributeSet; import android.widget.GridVie

ListView 中嵌套 GridView

1.主布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" andro

ListVIew中的数据发生改变时,数据不显示的问题

在进行listview的数据添加的时候,改变数据源后使用notifyDataSetChanged()方法刷新数据源的时候,发现界面根本不显示数据,一脸懵逼. 最后把问题放了一周后,找到了解决办法,原因是我把数据源改变的时候是直接赋值的,看网上的说法是改变了数据源的引用,而你给listview添加数据的时候,其实是给的一个句柄,而你给数据源直接赋值的时候是改变了句柄的,导致两处的句柄不同,而notifyDataSetChanged()方法其实是监控的前一个句柄的变化,所以导致notifyDataS

android ScrollView中嵌套GridView,ListView只显示一行的解决办法

注:本文是由网上大神分享的解决方案汇集而成 方法一: 重写ListView.GridView: 重写ListView: 1 public class MyListView extends ListView { 2 3 public MyListView(Context context) { 4 // TODO Auto-generated method stub 5 super(context); 6 } 7 8 public MyListView(Context context, Attrib

WPF性能调试系列 – 应用程序时间线

应用程序时间线(Application Timeline) 应用程序时间线工具是VS2015新添加的功能,通过对WPF程序的检测,可以分析应用程序消耗的时间包含用户界面框架.服务网络和磁盘请求.程序启动及页面加载.此处重点介绍程序加载和页面加载的时间性能分析. 模拟分析应用程序 打开VS2015,通过菜单分析(N)-> 性能探测器(F)打开分析器,在可用工具中选择应用程序时间线. 注: 1.  不同版本的VS菜单名称可能不相同,上图为VS2015企业简体中文版,根据路径选择具体菜单 2.  分析

ScrollView中嵌套GridView,Listview的办法

按照android的标准,ScrollView中是不能嵌套具有滑动特性的View的,但是有时如果设计真的有这样做的需要,或者为了更方便简单的实现外观(比如在外在的大布局需要有滑动的特性,并且内部有类似于List的UI结构,那么ListView + Adpater的方式来实现里面的效果就很方便,算是违规抄近道的一种方式吧),有时就会不得不采用这种怪异的组合方式. 先说下这种方式如果不做特殊处理时会出现的冲突和问题: 1,在SrollView中嵌套ListView,ListView的显示会有问题,只

Android中使用GridView和ImageViewSwitcher实现电子相册简单功能

我们在手机上查看相册时,首先看到的是网格状的图片展示界面,然后我们选择想要欣赏的照片点击进入,这样就可以全屏观看该照片,并且可以通过左右滑动来切换照片.如下图的显示效果: 首先我们先罗列一下本次实现所要用的知识点: (1)首页界面,我们需要可以通过GridView来实现,有关GridView的实现代码以及讲解请参照本人相关博文: Android中GridView通过自定义适配器(未优化)实现图文视图排列 (2)具体照片的展示以及左右切换效果,可以实现这个效果的方法很多(ViewPager,Vie