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

僵硬的ListView

不可以滚动的ListView,解决在ScrollView中需要使用Listview的问题标签:Android[1].[文件] RigidList


不可以滚动的ListView,解决在ScrollView中需要使用Listview的问题




标签:
Android



[1].[文件] RigidListView.java ~ 4KB    下载(10) 跳至 [1]





?










1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31


32


33


34


35


36


37


38


39


40


41


42


43


44


45


46


47


48


49


50


51


52


53


54


55


56


57


58


59


60


61


62


63


64


65


66


67


68


69


70


71


72


73


74


75


76


77


78


79


80


81


82


83


84


85


86


87


88


89


90


91


92


93


94


95


96


97


98


99


100


101


102


103


104


105


106


107


108


109


110


111


112


113


114


115


116


117


118


119


120


121


122


123


124


125


126


127


128


129


130


131


132


133


134


135


136


137


138


139


140


141


142


143


144


145


146


147


148


149


150


151


152


153


154


155


156


157


158


159


160


161


162


163


164


165


166


167


168


169


170


171


172


173


174


175


176


177


178




package

com.phodev.andtools.widget;


 


import

android.content.Context;


import

android.content.res.Resources.NotFoundException;


import

android.database.DataSetObserver;


import

android.graphics.drawable.Drawable;


import

android.util.AttributeSet;


import

android.view.View;


import

android.view.View.OnClickListener;


import

android.widget.BaseAdapter;


import

android.widget.ImageView;


import

android.widget.LinearLayout;


import

android.widget.ListAdapter;


 


/**


 *
LinearLayout模仿ListView,解决ListView在ScrollView中的不兼容问题


 *


 *
@author skg


 *


 */


public

class

RigidListView
extends

LinearLayout
implements

OnClickListener {


 


    private

BaseAdapter mAdapter;


    private

OnItemClickListener onItemClickListener;


    private

Drawable dividerDrawable;


    private

int

dividerResId = android.R.drawable.divider_horizontal_dim_dark;


    private

int

itemSelectorDrawableResId = android.R.drawable.list_selector_background;


 


    /**


     *
绑定布局


     */


    private

void

bindLinearLayout() {


        removeAllChild();


        int

count = mAdapter.getCount();


        for

(
int

i =
0;
i


            View
v = mAdapter.getView(i,
null,
null);


            v.setLayoutParams(new

LayoutParams(LayoutParams.FILL_PARENT,


                    LayoutParams.FILL_PARENT));


            //


            LinearLayout
itemCOntainer=
new

LinearLayout(getContext());


            itemContainer.setLayoutParams(new

LayoutParams(


                    LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));


            //
添加Item的View


            itemContainer.addView(v);


            //
设置Divider


            itemContainer.setBackgroundResource(itemSelectorDrawableResId);


 


            itemContainer.setOrientation(LinearLayout.VERTICAL);


            itemContainer.setId(i);


 


            itemContainer.setClickable(true);


            if

(onItemClickListener !=
null)
{


                itemContainer.setOnClickListener(this);


            }


 


            itemContainer.setFocusable(true);


 


            Drawable
divider = getDivider();


            if

(divider !=
null)
{


                ImageView
line =
new

ImageView(getContext());


                line.setBackgroundDrawable(dividerDrawable);


                itemContainer.addView(line);


            }


 


            addView(itemContainer,
i);


        }


    }


 


    public

RigidListView(Context context) {


        super(context);


        init(context);


    }


 


    public

RigidListView(Context context, AttributeSet attrs) {


        super(context,
attrs);


        init(context);


    }


 


    private

void

init(Context context) {


        this.setOrientation(LinearLayout.VERTICAL);


    }


 


    /**


     *
不设置的话使用默认的,0表示不使用任何Divider


     *


     *
@param resId


     */


    public

void

setDivider(
int

resId) {


        dividerResId
= resId;


    }


 


    public

void

setItemSelector(
int

resId) {


        itemSelectorDrawableResId
= resId;


    }


 


    private

Drawable getDivider() {


        if

(dividerDrawable ==
null

&& dividerResId !=
0)
{


            try

{


                dividerDrawable
= getContext().getResources().getDrawable(


                        dividerResId);


            }
catch

(NotFoundException e) {


                e.printStackTrace();


            }


        }


        return

dividerDrawable;


    }


 


    /**


     *
获取Adapter


     *


     *
@return adapter


     */


    public

ListAdapter getAdpater() {


        return

mAdapter;


    }


 


    /**


     *
设置数据


     *


     *
@param adpater


     */


    public

void

setAdapter(BaseAdapter adpater) {


        mAdapter
= adpater;


        mAdapter.registerDataSetObserver(dataSetObserver);


        bindLinearLayout();


    }


 


    /**


     *
设置点击事件,OnItemClickListener不同于ListView的监听,这个监听必须在setAdapter之前才有效


     *


     *
@param onItemClickListener


     */


    public

void

setOnItemClickListener(OnItemClickListener onItemClickListener) {


        this.onItemClickListener
= onItemClickListener;


    }


 


    public

interface

OnItemClickListener {


        public

void

onItemClick(View view, ListAdapter adpater,
int

position);


    }


 


    @Override


    public

void

onClick(View v) {


        if

(onItemClickListener !=
null)
{


            onItemClickListener.onItemClick(v,
mAdapter, v.getId());


        }


    }


 


    private

DataSetObserver dataSetObserver =
new

RigidDataSetObserver();


 


    public

class

RigidDataSetObserver
extends

DataSetObserver {


 


        @Override


        public

void

onChanged() {


            refreshUI();


        }


 


        @Override


        public

void

onInvalidated() {


            refreshUI();


        }


 


    }


 


    /**


     *
刷新UI


     */


    private

void

refreshUI() {


        bindLinearLayout();


 


    }


 


    private

void

removeAllChild() {


        if

(
this.getChildCount()
>
0)
{


            removeAllViews();


 


        }


    }


}






推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
author-avatar
多米音乐_34396075
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有