- 浏览: 633986 次
文章分类
最新评论
-
树下白狐:
listview与adapter用法 -
u011467537:
...
Android背景渐变色(shape,gradient) -
asdf12343800:
asdf12343800 写道asdf12343800 写道a ...
Android背景渐变色(shape,gradient) -
asdf12343800:
asdf12343800 写道asdf12343800 写道 ...
Android背景渐变色(shape,gradient) -
asdf12343800:
asdf12343800 写道 : lol: fghhg
Android背景渐变色(shape,gradient)
在Android应用开发中,很多时候都会遇到这样的需求,一个listView,含有N项,当点击某项时,该项展开,显示该项中隐藏的某些控件,再点击,该项收回,重新隐藏部分控件,当一项打开状态,点击另一项,另一项展开,该项关闭。(说的有点绕,看下图)
在去年的时候,自己的一篇文章(http://blog.csdn.net/aomandeshangxiao/article/details/6643831),里面有Item的选择问题,用的方法比较笨,要遍历一遍,把所有的item全部都设置一下,应该是很浪费资源的。还有一个问题就是,当listview的item多于一个屏幕的时候,会出现重复选择问题,就是当你选中一项滑动的时候,可能会发现滑动后出现的某项也是在选中状态,这个问题令人十分抓狂。见网上有个方法是:在adapter的getView里面不使用convertview。每一个view都是重新创建一个。能够解决问题,但是还是有点浪费资源。
先看下效果图:第二项被选中
第四项被选中:
这个方法也是在他人的帮助下,努力得来,分享一下!
[java]
public class ListViewTestActivity extends Activity implements OnItemClickListener{
private ListView mListView;
private ListAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mListView = (ListView)findViewById(R.id.list);
mAdapter = new ListAdapter(this);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mAdapter.changeImageVisable(view, position);
}
}
这里应该注意到与平常的不同,onItemClick方法里面调用了自定义ListAdapter里面的自定义changeImageViewVisable方法。
看ListAdapter:
[html]
public class ListAdapter extends BaseAdapter {
private Context mContext;
private View mLastView;
private int mLastPosition;
public ListAdapter(Context context) {
this.mContext = context;
}
@Override
public int getCount() {
return 8;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if(convertView == null ) {
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(R.layout.list_item, null);
holder =new Holder();
holder.textView = (TextView)convertView.findViewById(R.id.textView);
holder.UEFAView = (ImageView)convertView.findViewById(R.id.image_uefa);
holder.mascotView = (ImageView)convertView.findViewById(R.id.image_mascot);
holder.hint = convertView.findViewById(R.id.hint_image);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
holder.textView.setText("Hello,It is " + position);
return convertView;
}
class Holder {
TextView textView;
ImageView UEFAView;
ImageView mascotView;
View hint;
}
public void changeImageVisable(View view,int position) {
if(mLastView != null && mLastPosition != position ) {
Holder holder = (Holder) mLastView.getTag();
switch(holder.hint.getVisibility()) {
case View.VISIBLE:
holder.hint.setVisibility(View.GONE);
break;
default :
break;
}
}
mLastPosition = position;
mLastView = view;
Holder holder = (Holder) view.getTag();
switch(holder.hint.getVisibility()) {
case View.GONE:
holder.hint.setVisibility(View.VISIBLE);
break;
case View.VISIBLE:
holder.hint.setVisibility(View.GONE);
break;
}
}
}
代码的最下端是changeImageVisable方法。(注意:在这个方法中,博客代码版本和提供下载代码版本中有细微差异,博客代码较下载代码性能更优,这也体现了Holder类的优越性,一定要好好用好Holder,应好好思考下,为什么这样写性能就更好些呢?欢迎留言讨论)。
布局文件:
main.xml:
[html]
<?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"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ListView Test" />
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
></ListView>
</LinearLayout>
list_item.xml:
[html]
<?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:orientation="vertical"
>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test"
android:textSize="20sp"
/>
<LinearLayout
android:id="@+id/hint_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone">
<ImageView
android:id="@+id/image_uefa"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:src="@drawable/uefa"
/>
<ImageView
android:id="@+id/image_mascot"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:src="@drawable/mascot"
/>
</LinearLayout>
</LinearLayout>
作者:aomandeshangxiao
发表评论
-
android layout查找顺序
2013-01-07 14:11 1143layout可以按后缀支持多分辨率,分辨率layout-mdp ... -
listview与adapter用法
2012-09-11 08:59 97427一个ListView通常有两 ... -
intent 传值
2012-09-11 08:58 1082intent.putExtra()存 getInten ... -
android(java)控制http连接超时的问题
2012-09-10 15:39 1528"声明一个boolean公共变量,表明当前httpc ... -
android 设置http等待超时
2012-09-10 15:39 11605BasicHttpParams httpPar ... -
android 设置椭圆
2012-09-10 15:39 2336<shape xmlns:android=& ... -
Android 自定义Button按钮显示样式(正常、按下、获取焦点)
2012-09-10 15:39 1287首先写一个定义Button样式的XML文件:新建Andr ... -
如何检查Android网络连接状态
2012-09-10 15:40 8695在发送任何HTTP请求前最 ... -
android 按两次返回键退出
2012-09-07 11:12 5377package com.anjoyo.test; ... -
Android Animation(二)
2012-09-07 10:58 944关于动画的实现,Andr ... -
activity切换动画
2012-09-07 10:55 4181在介绍切换动画效果前,先介绍下将使用到的Android ... -
android 震动
2012-09-07 10:02 2059让手机震动,需要创建Vibrator对象,通过调用vi ... -
android.R.layout下有一些常量存在哪?
2012-09-07 00:35 1156在你的android SDK目录下可以看到 例如 你的 and ... -
Android禁止横屏竖屏切换
2012-09-05 13:43 989在Android中要让一个程序的界面始终保持一个方向,不 ... -
ListView滚动加载(类似Android Market的列表)
2012-09-04 21:08 1759ListView滚动加载(类似Android Mark ... -
android 设置EditText只能输入数字
2012-09-03 23:23 47690android:numeric="intege ... -
填充Listview第一个Item的分隔线
2012-08-31 15:53 63131. 在res/drawable/目录下新建 mygra ... -
android相对父控件比例
2012-08-31 15:39 969shape xml中的gradient能用 70%p 这 ... -
分割线样式
2012-08-31 14:09 1083android给listview设置分割线Divider ... -
Android时钟
2012-08-31 13:21 21301. Android时钟,效果图: 2. ...
相关推荐
android中listview的item滑动删除效果,已解决listview点击问题
1、ListView item中加入checkbox后onListItemClick 事件无法触发。 原因:checkbox的优先级高于ListItem于是屏蔽了ListItem的单击事件。 解决方案:设置checkbox的android:focusable="false" 2、选择其中的...
这个代码完美解决了vb.net中的 ListView高亮的问题. 不但可以改变默认的高亮颜色,微蓝色, 而且在ListView的焦点失去的情况下,照样高亮已经选择的行. 不仅单行,复数行的选择也没有问题.
网上大部分都是写的item上面显示静态图片的例子,我这个是解决显示动态图片时复用导致的动画显示错乱问题。问题描述:假如一屏可以显示10个item项,如果第一个正在播放动画,此时往下滚动,当第一个item不可见时会...
知识点:1、解决listView滚动时checkBox的选择状态会发生变化(絮乱);2、ListView的Item长按,点击时间并存,实现同一UI控件多需求响应各类事件;3、点击ListViewItem选中响应Item里的CheckBox;4、计算选中的项数...
本demo实现 listview item上面包含多个edittext和一个CheckBox,解决了滑动时edittext数据混乱,CheckBox状态不正确,包括,单选,全选,反选功能
ListView中的item带单选,解决冲突
需求如题目:Android listview中item部分区域添加点击事件,在一个界面显示了listview,但显示的内容分为上下两部分,分别是白色的背景和蓝色的背景,现在需要只点击蓝色的背景,才能跳转到其他界面,解决方式如下:...
这个demo主要解决了在listview上面增加button 是button和item同事拥有点击事件,接觉他们两个事件冲突的问题
限时抢购,倒计时功能、解决listview卡顿,复用问题。
ListView对应多个布局的实现方式。ListView滚动中布局错误的解决方案,博客中对于的介绍博文
ListView嵌套ListView时出现的问题1.子ListView展示一条(方法,重写ListViewListViewInScrollView)2.子LsitView的出现是由点击...~~以上两个问题都解决了,可参考MainActivity代码,都写在了这个类中,所以代码有点多
android 的listview 内部item的布局包含checkbox控件时,会遇到常见的问题:1.checkbox无法选择;2.选择的checkbox后滑动listview内容时会checkbox选择的值会刷新成原来状态值(即没选中);3.选择listview所有checkbox...
解决了listview优化后条目中有checkbox,togglebutton等控件时,上下滑动条目出现错乱的问题
ListView中含有多个item布局的处理,在类似微信里chat界面的时候,会遇到一个listView中有多个布局存在的状况(普通聊天布局、纯图片布局、图文混排布局等等,提供一些解决方案。
一、问题 listview控件,可以实现增大行距吗?行与行太紧了,不好看呀。 有办法可以实现吗? 我不想通过加大字体的方法,因为字体大了,行距还是近呀。 我要的是增大行间距。 二、解决方法: // // imageList1 //...
android listView item动态加入多个layout,有办法解决的话请回复,大家也可以交流
相信大家都遇到过 Android listview和button点击事件冲突问题 网上有很多解决方法 但是不全面 按照网上说的通常是在ListView的Item布局中给Button加 android:focusable="false"在Item根布局加android:...
android ListView Button 等控件强行获取焦点导致 item监听无效的解决办法 ,利用ListView 显示多个不同类型的item