僵硬的ListView

不可以滚动的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 < count; 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();

        }

    }

}

时间: 2024-10-09 06:53:39

僵硬的ListView的相关文章

ListView之多种类型Item

一.概述 一般而言,listview每个item的样式是一样的,但也有很多应用场景下不同位置的item需要不同的样式. 拿微信举例,前者的代表作是消息列表,而后者的典型则是聊天会话界面. 本文重点介绍后者,也就是多类型item的listview的实现思路和方法,比如实现一个这样的聊天会话页面: 二.实现思路 2.1 第一种思路:用“一种类型”变相实现多种类型 这种思路其实与 ListView之点击展开菜单 这篇文章的原理一样,每个item的布局都包含所有类型的元素: 对于每个item,根据实际类

Android 监听ListView、GridView滑动到底部

// 监听listview滚到最底部mIndexList.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { // 当不滚动时 case OnScrollListener.SCROLL_STATE_IDLE: // 判断滚动到底部 if (view.get

C# 将Access中时间段条件查询的数据添加到ListView中

C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加Item. 首先,ListView的Item属性包括Items和SubItems.必须先实例化一个ListIteView对象.具体如下: ListViewItem listViewItem=new ListViewItem(); l

[ ObjectListView ] - ListView的增强控件 - 前言 (翻译)

********************************************************************************** 原  标 题: A Much Easier to Use ListView 原文地址: https://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView 翻       译: 于国栋 http://www.shannon.net.cn *********

Android ListView工作原理完全解析(转自 郭霖老师博客)

原文地址:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况.ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了. 另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到

360手机助手(二):侧拉栏drawerLayout+Tab+Viewpager+ListView+Pulltorefresh+imageloder

整个项目的框架在ContentPager,要熟悉这个类. 简介 完成侧拉栏的显示,侧拉首页对应的:首页+应用+游戏这3个 tab,包含的知识点有:请求数据 +pullTofresh + ImageLoader +轮播图 + listView 效果图: 侧拉栏的实现 V4包中的DrawerLayout实现侧拉效果,每个侧拉的item对应一个fragment,点击该item时,先把所有的fragment隐藏 + 文字设置未选中,然后才创建对应的fragment并显示 怎么实现侧拉栏的显示与隐藏? 点

ListView

一.ListView入门 1.定义ListView在布局中 2.定义ListView的数据适配器 3.实现baseAdapter的getCount方法和getView方法. 二.ListView的优化 1.缓存对象 //convertView 历史缓存对象 @Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv; if(convertView == null){ /

Android——ListView布局+适配器(三)

Android--ListView布局+适配器(三) package com.example.administrator.newstop; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import andro

Android——ListView多布局+适配器(二)

Android--ListView多布局+适配器(二) <span style="font-size:18px;">package com.example.administrator.newstop.entity; /** * Created by Administrator on 2016/8/4. */ public class News { private String title; private String pubDate; private int img; p