省去 ListView 滚动条 显示全部内容

简介: 引用:http://www.cnblogs.com/LuoYer/archive/2011/05/07/2039884.html http://www.eoeandroid.com/thread-93669-1-1.html 众说纷纭:ScrollView中包含ListView   如果你想在ScrollView中包含ListView而产生了疑问,百思不得其解,那么,很可能就百度亦不得其解,Google仍不得其解了,你会在寻求答案的过程中,体会到众说纷纭是个什么涵义了。

引用:http://www.cnblogs.com/LuoYer/archive/2011/05/07/2039884.html

http://www.eoeandroid.com/thread-93669-1-1.html

  如果你想在ScrollView中包含ListView而产生了疑问,百思不得其解,那么,很可能就百度亦不得其解,Google仍不得其解了,你会在寻求答案的过程中,体会到众说纷纭是个什么涵义了。

  ListView本身就有滚动属性,会跟ScrollView冲突。所以,有人提到自定义功能,并且给出了实现方式;有人会提议换一种实现方式,避免一起使用;有人就更强硬,不能这么用。

  如果是自定义功能的话,这么多控件放在这里,动不动就自定义,虽然已经被人实现了,还是不免为搁置了那么多控件而不甘;如果是换一种方式去布局,要真是能够轻易实现,就不必为此大费周折来思考同时使用了;要说不能用,那只是需求没到,要真是这种方式最符合需求,虽说强扭的瓜不甜,呵呵,就是生的也得吃喽。

  如果,有人使用过Google的Market,那么,对这个两个界面应该比较熟悉:这是Apk文件的详细介绍界面,中间关于开发者介绍的截图。  img_2f7b05842a439e3ef2d683d46c3abb77.pngimg_0efd858c2d0ce4f3d21a76aa59b5c555.png

  操作过程中会发现,“About the developer”下属的三项内容,非常符合ListView的属性,点击进入对应功能页面,长按弹出模糊选项框(后面截图是下面内容长按弹出的,性质一样的)等功能。

   而且,中间部分整个布局是可以拖动的,明显ScrollView的性质。这就不能不让我硬着头皮来看是否能在ScrollView中使用ListView的可能性了。

   在查看了大量资料后,终于,让我得到了一个可以接受的结论:

  在ListView内容寥寥可数,而且选项操作是固定的情况下,是可以通过设置它的高度,让它“放弃”自身滚动属性,而放置到ScrollView中使用的。

  因为,不“放弃”自身滚动属性,就会出现:前面提到的三项内容,只能显示出一项多出来,拖动它的话,会滚动出现其他内容,也可以说是滚动中的滚动了。

  显然,Market中开发者的内容是固定的,而且,点击后的操作也是固定的,符合条件。

  当然,还是需要添加一些其他处理了:

  一、获取并设置ListView内容的高度:

private void setListViewHeight(ListView lv) {
ListAdapter la
= lv.getAdapter();
if ( null == la) {
return ;
}
// calculate height of all items.
int h = 0 ;
final int cnt = la.getCount();
for ( int i = 0 ; i < cnt; i ++ ) {
View item
= la.getView(i, null , lv);
item.measure(
0 , 0 );
h
+= item.getMeasuredHeight();
}
// reset ListView height
ViewGroup.LayoutParams lp = lv.getLayoutParams();
lp.height
= h + (lv.getDividerHeight() * (cnt - 1 ));
lv.setLayoutParams(lp);
}

  二、通过设置标签,来响应具体操作:

  1.定义标签,及点击后的处理方法

// developer information
private final static String DEV_TAG_ID = " developer_id " ;
private final static String DEV_TAG_HP = " developer_home_page " ;
private final static String DEV_TAG_EM = " developer_email " ;
private void developerItemClick(String tag) {
if (DEV_TAG_ID.equals(tag)) {
// display list of developer's apks
} else if (DEV_TAG_HP.equals(tag)) {
// visit developer's home page
} else if (DEV_TAG_EM.equals(tag)) {
// send mail to developer
}
}

  2.监听ListView点击设置

final DevAdapter adapter = new DevAdapter(ApkInfo. this , listItem, tags,
R.layout.developer_item, from, to);
devInfoLv.setAdapter(adapter);
devInfoLv.setOnItemClickListener(
new OnItemClickListener() {
public void onItemClick(AdapterView <?> parent, View view, int position, long id) {
developerItemClick(adapter.getItemTag(position));
}
});
setListViewHeight(devInfoLv);

  3.自定义DevAdapter,主要添加了存储tags内容和获取点击项tag内容,以确定点击操作,供 2 使用。

public class DevAdapter extends SimpleAdapter {
private String[] tags;

public DevAdapter(Context context, List <? extends Map < String, ?>> data,
ArrayList
< String > tags, int resource, String[] from, int [] to) {
super (context, data, resource, from, to);
int size = tags.size();
this .tags = new String[size];
for ( int i = 0 ; i < size; i ++ ) {
this .tags[i] = tags.get(i);
}
}

public String getItemTag( int position) {
return this .tags[position];
}
。。。 。。。
}

  4.添加ListView项时,对应添加tag到tags中

ArrayList < String > tags = new ArrayList < String > ();
// 如果id存在
tags.add(DEV_TAG_ID);
// 如果主页存在
tags.add(DEV_TAG_HP);
// 如果邮箱存在
tags.add(DEV_TAG_EM);
注意:listView中的adapter里的getview中的view,只能是单个view  或是线性布局,不能为相对布局(可把相对布局放在线性布局中).
相关文章
uniapp滚动条置顶效果、自定义页面滚动条的位置(整理)
uniapp滚动条置顶效果、自定义页面滚动条的位置(整理)
|
XML 存储 缓存
底部导航栏的几种实现方式
底部导航栏的几种实现方式
332 0
|
Android开发
Android开发 ListView(垂直滚动列表项视图)的简单使用
Android开发 ListView(垂直滚动列表项视图)的简单使用
351 0
Android开发 ListView(垂直滚动列表项视图)的简单使用
|
Android开发
Android项目实战(十五):自定义不可滑动的ListView和GridView
原文:Android项目实战(十五):自定义不可滑动的ListView和GridView 不可滑动的ListView (RecyclweView类似) public class NoScrollListView extends ListView { public NoScrollLi...
967 0
小程序 - swiper除了左右切换还有上下滚动超出屏幕的内容
本来呢,我是有专门整理小程序恶心bug的文章的,每次只要添加汇总就好, 但是呢,鉴于这个问题的恶心程度,所以我把他单独拿出来说了。 ——————————————--------------------------------------------------产品经理都说恶心的需求---------...
2380 0
UWP-ListView到底部自动加载更多数据
原文:UWP-ListView到底部自动加载更多数据 ListView绑定的数据当需要“更多”时自动加载   ListView划到底部后,绑定的ObservableCollection列表数据需要加载的更多,或着ListView初始时,绑定的数据也需要自动加载(更多),实现一个接口 ISuppor...
1089 0