androidlistview问题
Ⅰ Android ListView问题
如果是这个错液升误的话Custom view IndexableListView is not using the 2- or 3-argument View constructors:
改正方法燃埋喊皮野:写三个构造函数就OK了
public IndexableListView(Context context) {
super( context);
}
public IndexableListView(Context context, AttributeSet attrs) {
super( context, attrs );
}
public IndexableListView(Context context, AttributeSet attrs, int defStyle) {
super( context, attrs, defStyle );
}
Ⅱ android listview viewholder 错乱怎么解决代码
在没有用viewHolder的情况下,listView表现效率低下。如果加载的数量过多则会一点点的消耗内存,直到抛出oom。开始异步加载图片会出现图片错位的问题,后来查阅资料将holder里边的图片地址和图片一一对应起来,在异步加载的回调函数中将其替换回来。
holder.thumb_image.setTag(hotel.getHotelTitlePic());
//避免图标错位,在异步加载成功后替换回来
ImageView imageView = (ImageView) listView.findViewWithTag(imageUrl);
if(imageView != null){
imageView.setImageDrawable(imageDrawable);
imageView.setTag("");
}
以上关键代码解决图片错位问题。
下面是getView()方法
public View getView(int position, View rowView, ViewGroup parent){
final
MHotelInfo hotel = this.getItem(position);
if (rowView == null) {
holder =
new ViewHolder();
LayoutInflater inflater = ((Activity)
this.getContext())
.getLayoutInflater();
rowView =
inflater.inflate(R.layout.hotel_item_view, null);
holder.typeName =
(TextView) rowView.findViewById(R.id.hotelType);
holder.thumb_image=(ImageView)rowView.findViewById(R.id.img);// 缩略图
holder.distance = (TextView) rowView.findViewById(R.id.distance);
rowView.setTag(holder);
}else{
holder = (ViewHolder)
rowView.getTag();
}
// 设置ListView的相关值
holder.thumb_image.setTag(hotel.getHotelTitlePic());
//避免图标错位,在异步加载成功后替换回来
holder.typeName.setText(hotel.getTypeName());
if(null ==
hotel.getHotelTitlePic() || hotel.getHotelTitlePic().equals("")){
//如果没有图标就显示默认图标
holder.thumb_image.setImageResource(R.drawable.downloadfalse);
}else{
//异步加载图片
imageLoader.loadDrawable(hotel.getHotelTitlePic(), new ImageCallback() {
public void imageLoaded(Drawable imageDrawable, String imageUrl) {
ImageView imageView = (ImageView) listView.findViewWithTag(imageUrl);
if(imageView != null){
imageView.setImageDrawable(imageDrawable);
imageView.setTag("");
}
}
});
}
return
rowView;
}
static class ViewHolder {
TextView
typeName;
ImageView thumb_image;
}
但是ViewHolder为什么是被设计成static类型的,本人一直没弄清楚。在网上找了些资料但是一直没能看到一个能说服我的理由。又说节省内存,保持对象的唯一性,还有说保持图片不错乱但是个人感觉都不怎么靠谱。今天我试了下将static去掉照常运行没感觉和以前有什么区别。后来我查了下static类的一些特性,首先ViewHolder是一个内部类若是static类的话则不需要依赖外部类的对象。也就是说只有static的内部类的成员变量才可以被声明成static类型,若内部类不是static类型的则不可以声明静态成员变量。不知道是不是static内部类的这个特性吸引了设计者?如果有谁清楚这个问题还请不吝赐教。
Ⅲ android的ListView操作问题
写一个适配器,public class MyAdapter extends BaseAdapter{
/伍哪/重写扰源抽象方法
//有一个getView(int arg0, View arg1, ViewGroup arg2)这个方法必须重写
其中arg0就是这个item在listView中的位置,你写一个内部类来实现缓橘态接口OnClickListenner,
然后比如每一个item有一个Button b,b.setOnclickListenner(new MyListenner()),你有了item的position,就可以操作了
}
Ⅳ android 中listView显示的问题
这个不知道
Ⅳ Android ListView比较怪异的现象,急求大神回答
你用viewpager可以解决。
你用一个listview去set不同的Adapter会有问题的。
你set不漏和吵同的Adapter,要先把原来的item clear掉,然后又重新绘制界面,性能上来看是不太好的,如果有个用户闲得蛋疼没什么鸟事做,不断的点模块一,模块二之间来回切换,你的应用就不断的 clear,clear,clear......不断的绘制界面,绘制界面,绘制界面。。。。。。如果你的listview里面有加载到图返侍片的,性能就更加差了,而且,很有可能会报内存溢出。
你用viewpager每个view 装载一个listview,点模块一,模块二也是viewpager的切换,就不用你在同一个listview里面去set不同的Adapter。
你现在的这种方法理论是可以实现的,但实际上很容易出现问题。
你用viewpager重新搞过,布局也要重新调整,如果不棚散熟悉viewpager的就先网上搜索一下相关viewpager的资料。
Ⅵ android listview问题,求解。listview显示,行与行有堆叠
那是ListView的入门教程吧,主要用来熟悉控件用法的,写的简单省事但不规范,真正在项目中使用时要比这复杂,首先不推荐数组保存大量View,因为开销太大。另外为了提升流畅性,避免大量的inflate和findViewById操作,很多人都爱加个ViewHolder类……
你可以把ListViewAdapter类改成下面这样(Context传Activity实例,像这里就是传MainActivity.this),不过我这么写其实也有偷懒,还能写的更完善,或者用RecyclerView代替。
java"> {
LayoutInflaterinflater;
String[]itemTitles;
String[]itemTexts;
int[]itemImageRes;
publicListViewAdapter(Contextcontext,String[]itemTitles,
String[]itemTexts,int[]itemImageRes){
inflater=LayoutInflater.from(context);
this.itemTitles=itemTitles;
this.itemTexts=itemTexts;
this.itemImageRes=itemImageRes;
}
publicintgetCount(){
returnitemTitles!=null?itemTitles.length:0;
}
@Override
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returnnull;
}
publiclonggetItemId(intposition){
returnposition;
}
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
ViewHolderviewHolder;
if(convertView==null){
convertView=inflater.inflate(R.layout.item,parent,false);
viewHolder=newViewHolder();
viewHolder.title=(TextView)convertView
.findViewById(R.id.itemTitle);
viewHolder.text=(TextView)convertView
.findViewById(R.id.itemText);
viewHolder.image=(ImageView)convertView
.findViewById(R.id.itemImage);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.title.setText(itemTitles[position]);
viewHolder.text.setText(itemTexts[position]);
viewHolder.image.setImageResource(itemImageRes[position]);
returnconvertView;
}
classViewHolder{
publicTextViewtitle;
publicTextViewtext;
publicImageViewimage;
}
}
Ⅶ Android中使用listview出现数据紊乱
ListView的Item child view个数是最多能显示的item数+2。
也就是说,假设你当前看到ListView的item数最多是9, 那这个ListView其实最多只有11个child view, 但ListView可能有几十几扒腊百个Item, 怎么办呢简伍?
当你向下滑动的时候, 把第12个item滑出来的时候,事实上第1,2个item已经完全看不到了,所以第12个Item是重用第1个Item的view, 第13个item是重用的第2个Item的view,也就是ListAdapter.getView()中作为参数传入的convertView。
这样明白了吧, 针对第1个Item view,如果你给里面的控件设置拦此或了一些属性,那么当你滑动listview的时候,第12个item上也会是一样的item view。
So, 两种办法:
1) 在ListAdapter.getView()这个方法中, 每次都是重新创建一个view return。
2)在ListAdapter.getView()这个方法中,还是会重用convertView,但是每次都要重新去初始化convertView的属性。
Ⅷ Android listview问题
listview 的item是复差键用的,item被翻出时会被回收用作下面的翻上来虚指巧的项
你要在adapter里面初始化每个控逗薯件
Ⅸ android listView问题
在ListView的BaseAdapter里面加一个 int expandIndex=-1;属性,表示需要显示图片的位置,并为其增加set和get函数;
在getView里面做判断,如果当前position等于expandIndex,则显示imageView,不等则隐藏;
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent)
{
……
if(positoin==expandIndex)
{
imageView.setVisibility(View.VISIBLE);
}
else
{
imageView.setVisibility(View.INVISIBLE);
}
漏姿……
}
然后设置listview点击事件,每次点击,把被点击的位置设为expandIndex,并刷新ListVIew如下
mListView.setOnItemClickListener(newOnItemClickListener()
返嫌绝{
@Override
publicvoidonItemClick(AdapterView<?>parent,Viewview,
intposition,longid)
者陪{
mAdapter.setExpandIndex(position);
mAdapter.notifyDataSetChanged();
}
});