首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

ListView setOnItemSelectedListener setOnItemClickListener 差别

2012-09-19 
ListView setOnItemSelectedListener setOnItemClickListener 区别OnItemSelectedListener.setOnItemSelec

ListView setOnItemSelectedListener setOnItemClickListener 区别

OnItemSelectedListener.setOnItemSelectedListener()

指的是鼠标获得一个条目的焦点,字面上理解是选择一个条目

?

OnItemClickListener.setOnItemClickListener()

指的是你单击一个条目。

如果你从鼠标滚动(或者说选择一个条目)过渡到单击一个条目,都会在调用OnItemClickListener.setOnItemClickListener()之前调用一次OnItemSelectedListener.onNothingSelected()。貌似是因为你单击了一个条目之前就默认你没有选择任何条目,所以会触发一个OnItemSelectedListener.onNothingSelected()

?

有关ListView中数据改变时,怎么办。

在你改变数据的后面加上一句adapter.notifyDataSetChanged(),adapter是Adapter的实例化对象,android自带的可以,你自己写的Adapter也可以

?

有关网上的 ListView中用到CheckBox,CheckBox的状态混乱的问题。

· 我敢说你们一定是用了convertView/ViewHolder 这种缓存技术。如果你不用这种技术,就没有CheckBox状态混乱的情况出现;但是取而代之的是你CheckBox的状态没有被保存,因为BaseAdapter中的getView()方法只会绘出ListView的每一行,他没有义务为你保存CheckBox的状态。需要你自己去在getView中做一些工作。

· 无论你采不采用convertView/ViewHolder 这种缓存技术,你可以通过这种方法解决CheckBox的状态保存与一致的问题。

?

就是设置一个Map<Integer, Boolean>? checkState=new HashMap<Integer, Boolean>();保存你当前选择的状态。然后在BaseAdapter的getView()方法中通过CheckBox checkBox=(CheckBox)convertView.findViewById(R.id.check)中获取到CheckBox,然后再checkBox.setChecked()就可以啦。很简单把?

· 其实还是用convertView/ViewHolder 这种缓存技术比较好,这样子你浏览ListView的时候速度很快。而不采用convertView/ViewHolder 这种缓存技术的时候,你会明显感觉ListView很卡

· convertView/ViewHolder 缓存技术的实质,其实就是convertView的复用,因为我在查看convertView是否为null的时候,只有7次它输出null,其余都是convertView不为null。也就是说convertView这个对象引用只有7个(每个手机不同,就是一个屏幕最多容纳的条目数)。convertView/ViewHolder 其实是在复用每一个条目的View。只让这7个引用对应7个View的实例,而不是我们每次都给一个引用建立一个新的View实例。这样子,在ListView绘制调用getView的时候,我们只建立了7个View实例,只是每次把View中的内容改变了一下,比如TextView.setText(str)。这样子程序就很快

?

075?????? public class MyAdapter extends BaseAdapter{?

076???

077?????????? private LayoutInflater mInflater;?

078????????????

079????????????

080?????????? public MyAdapter(Context context){?

081?????????????? this .mInflater = LayoutInflater.from(context);?

082?????????? }?

083?????????? @Override?

084?????????? public int getCount() {?

085?????????????? // TODO Auto-generated method stub?

086?????????????? return mData.size();?

087?????????? }?

088???

089?????????? @Override?

090?????????? public Object getItem( int arg0) {?

091?????????????? // TODO Auto-generated method stub?

092?????????????? return null ;?

093?????????? }?

094???

095?????????? @Override?

096?????????? public long getItemId( int arg0) {?

097?????????????? // TODO Auto-generated method stub?

098?????????????? return 0 ;?

099?????????? }?

100???

101?????????? @Override?

102?????????? public View getView( int position, View convertView, ViewGroup parent) {?

103????????????????

104?????????????? ViewHolder holder = null ;?

105?????????????? if (convertView == null ) {?

106????????????????????

107?????????????????? holder= new ViewHolder();??

108????????????????????

109?????????????????? convertView = mInflater.inflate(R.layout.vlist2, null );?

110?????????????????? holder.img = (ImageView)convertView.findViewById(R.id.img);?

111?????????????????? holder.title = (TextView)convertView.findViewById(R.id.title);?

112?????????????????? holder.info = (TextView)convertView.findViewById(R.id.info);?

113?????????????????? holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);?

114?????????????????? convertView.setTag(holder);?

115????????????????????

116?????????????? } else {?

117????????????????????

118?????????????????? holder = (ViewHolder)convertView.getTag();?

119?????????????? }?

120????????????????

121????????????????

122?????????????? holder.img.setBackgroundResource((Integer)mData.get(position).get( "img" ));?

123?????????????? holder.title.setText((String)mData.get(position).get( "title" ));?

124?????????????? holder.info.setText((String)mData.get(position).get( "info" ));?

125????????????????

126?????????????? holder.viewBtn.setOnClickListener( new View.OnClickListener() {?

127????????????????????

128?????????????????? @Override?

129?????????????????? public void onClick(View v) {?

130?????????????????????? showInfo();?????????????????

131?????????????????? }?

132?????????????? });?

133????????????????

134????????????????

135?????????????? return convertView;?

136?????????? }?

137????????????

138?????? }?

?

· 有关 convertView/ViewHolder 缓存技术参见网址的最后一种方法??? http://www.cnblogs.com/allin/archive/2010/05/11/1732200.htm

?

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cocodehouse/archive/2010/11/22/6026884.aspx

热点排行