http://www.cnblogs.com/allin/archive/2010/05/11/1732200.htmlhtml
二、Android中ListView的性能问题java
http://android.tgbus.com/Android/tutorial/201105/354459.shtmlandroid
三、设置背景色为透明,防止滑动时,背景变黑ide
android:cacheColorHint="#00000000"性能
四、设置ListView控件条目被按下时背景颜色在文字背后,设置成True时背景色会覆盖文字字体
android:drawSelectorOnTop="false" 优化
五、android:divider属性:本属性设置listView中的选项分隔符,可设置图片,颜色等。spa
android:divider="#00000000" 设置为无色,这样显示时,就没有分隔线了。code
六、android:minHeight="?android:attr/listPreferredItemHeight" 设置最小高度由item决定orm
七、Listview更新:
在BaseAdapter的getView()方法中根据条件改变View的字体颜色、其中的图片等,是不能当即在UI上显示的,必须调用notifyDataSetChanged()方法,实现更新。
ListView不能局部更新(如今为止我没找到实现局部更新的方法,若有同窗有方法实现局部更新,盼赐教。),更新实现以下:
BaseAdapter adapter = new BaseAdapter();
adapter.notifyDataSetChanged();
八、更改ListView中选中框的TextView的字体颜色:
要改变TextView的颜色,需调用TextView的setTextColor()方法设置,在使用中发现,在BaseAdapter中的getView()中使用“name.setTextColor(R.color.background);”方式字体会是黑色,可用”name.setTextColor(Color.rgb(0, 234, 255));“方式改变字体颜色,“Color.rgb(0, 234, 255)”为要设置的颜色的RGB值;最后在OnItemSelectedListener的onItemSelected()方法中调用”adapter.notifyDataSetChanged();“方法便可。
虽然这种方式能够改变字体颜色,但不知道为何?盼有知道的同窗解惑。
九、可扩展的ListView:ExpandableListView
ExpandableListView为ListView子类,
十、代码:
banner中的ListView定义
<ListView android:id="@+id/bannerList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:listSelector="@drawable/banneritemfocus" android:cacheColorHint="#00000000" android:drawSelectorOnTop="false" android:divider="#00000000" android:minHeight="?android:attr/listPreferredItemHeight" android:focusable="true" />
ListItem定义
<?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="horizontal" android:paddingLeft="10dip" android:paddingRight="8dip" android:paddingTop="1dip" android:paddingBottom="1dip" > <ImageView android:id="@+id/bannerPlay" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/banner_play" /> <TextView android:id="@+id/bannertext" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" android:textSize="14dip" android:gravity="center_vertical" android:textColor="@color/white" android:paddingTop="1dip" android:paddingBottom="1dip" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="right" > <ImageView android:id="@+id/bannerok" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="right" android:visibility="invisible" android:src="@drawable/banner_ok" /> </LinearLayout> </LinearLayout>
java代码:
private void showBannerListView() {
if(bannerPop == null) {
View v = getLayoutInflater().inflate(R.layout.banner, null);//加载包含ListView的定义
bannerPop = new PopupWindow(v);//新建PopupWiondow对象
bannerPop.setFocusable(true);//可得到焦点
bannerPop.setOutsideTouchable(true);//可点击PopupWindow区域外事PopupWindow消失,会调用popupWIndow的dismiss()方法
bannerPop.setBackgroundDrawable(new BitmapDrawable());//使PopuPWIndow响应退出按键
bannerList = (ListView)v.findViewById(R.id.bannerList);
bannerAdapter = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView bannerPlay = null;
TextView name = null;
if(convertView == null) {//优化ListView性能
convertView = getLayoutInflater().inflate(R.layout.banner_item, null);
bannerPlay = (ImageView)convertView.findViewById(R.id.bannerPlay);
name = (TextView)convertView.findViewById(R.id.bannertext);
convertView.setTag(R.id.bannerPlay, bannerPlay);
convertView.setTag(R.id.bannertext, name);
}else {
bannerPlay = (ImageView)convertView.getTag(R.id.bannerPlay);
name = (TextView)convertView.getTag(R.id.bannertext);
}
bannerPlay.setVisibility(View.GONE);//设置不可见
name.setText(bannerData.get(position));//设置文字内容
int select = bannerList.getSelectedItemPosition();
if(position == curBannerIndex) {
bannerPlay.setVisibility(View.VISIBLE);
name.setTextColor(Color.rgb(0, 234, 255));//设置字体颜色 }else {
name.setTextColor(Color.rgb(255, 255, 255));
}
return convertView;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public int getCount() {
return bannerData.size();
}
};
bannerList.setAdapter(bannerAdapter);
bannerList.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Log.i(TAG, "00000in onItemSelected:position="+position+" id="+id+" view="+view+" parent="+parent);
canceBannerDelayHide();
hideBannerDelay();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.i(TAG, "11111111in onNothingSelected: parent="+parent);
}
});
bannerList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
canceBannerDelayHide();
String name = bannerData.get(position);
int index = name.indexOf(tvgap);//-1 为电影
if(index == -1) {//电影,
childPositionIndex = 0;
}else {//电视剧,得到电视剧集数的childPositionIndex索引
String aa = name.substring(index + tvgap.length());
childPositionIndex = Integer.parseInt(aa) - 1;
name = name.substring(0, index);
}
String item[] = null;
for (int i = 0; i < favoriteData.size(); i++) {
item = favoriteData.get(i);
if(item[0].startsWith(name)){//可直接比较名称,得到groupPositionIndex 索引
groupPositionIndex = i;
break;
}
}
hideBanner();
changeMove();
}
});
bannerList.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
canceBannerDelayHide();
}else if(event.getAction() == MotionEvent.ACTION_UP) {
hideBannerDelay();
}
return false;
}
});
}else {
bannerAdapter.notifyDataSetChanged();
}
bannerList.setSelection(curBannerIndex);
bannerPop.showAtLocation(vv, Gravity.TOP, controlx, controly);
bannerPop.update(controlx, controly, controlWidth, controlHeight);
hideBannerDelay();
}