热门标签 | 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();


 


        }


    }


}






推荐阅读
  • 本文介绍了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类来获取输入数据。 ... [详细]
  • 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的问题,并提供了解决方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
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社区 版权所有