一、做listview的時候,遇到出現重複的view,比如總數爲10,最大顯示爲5,則listview顯示爲1、2、3、4、5、1、2、3、4、5等循環的;我們需求的爲顯示1、2、3、4、5、6、7、8、9、10;主要是listview的緩存機製造成的,下面貼Adapter的getView()代碼如下:
解析:把對控件setText的操作放到if (convertView == null) {}的外面來即可,否則會一直使用初始化的時候的那個值
</pre><p></p><p><span style="white-space:pre"></span></p><p></p><pre name="code" class="html"> public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Log.e("oydz", "position : " + position);
final int selectID = position;
ListItemView listItemView = null;
if (convertView == null) {
listItemView = new ListItemView();
convertView = listContainer.inflate(R.layout.recordfile_listview_item, null);
listItemView.FileNum = (TextView)convertView.findViewById(R.id.item_num);
// //listItemView.FileNum.setText(position + 1 +"");
listItemView.FileName = (TextView)convertView.findViewById(R.id.item_filename);
// //listItemView.FileName.setText(listFiles.get(position).getName());
listItemView.FileSize = (TextView)convertView.findViewById(R.id.item_filesize);
// //listItemView.FileSize.setText(getFileSize(listFiles.get(position)));
convertView.setTag(listItemView);
}else {
listItemView = (ListItemView)convertView.getTag();
}
listItemView.FileNum.setText(position + 1 +"");
listItemView.FileName.setText(listFiles.get(position).getName());
listItemView.FileSize.setText(getFileSize(listFiles.get(position)));
return convertView;
}
二、listview會遇到這樣的情況,描述如下:
進入activity,listview默認第一項爲選擇狀態(有焦點框),點擊某個按鈕,觸摸(select)某個item焦點框依然存在,並且當某個item獲得焦點時裏面的子控件需要發生相關變化
遇到這種需求,最開始使用的方式是對listview控件的listSelector屬性進行修改,但是在點擊完之後,item背景顏色是變化了,但是裏面的子控件不會保存變化;等等都沒有達到想要的效果;最終的解決方式是在適配器裏面,進行的;獲取得到select的位置,之後在返回view的時候返回指定的形式即可(可能描述不清楚,見諒!),相關代碼如下:
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int selectID = position;
ListItemView listItemView = null;
if (convertView == null) {
listItemView = new ListItemView();
convertView = listContainer.inflate(R.layout.lexus_videolist_item, null);
listItemView.Rlayout = (RelativeLayout)convertView.findViewById(R.id.mrelayout);
listItemView.FileNum = (TextView)convertView.findViewById(R.id.lexus_item_num);
//listItemView.FileNum.setText(position + 1 +"");
listItemView.FileName = (TextView)convertView.findViewById(R.id.lexus_item_filename);
//listItemView.FileName.setText(listFiles.get(position).getName());
listItemView.FileSize = (TextView)convertView.findViewById(R.id.lexus_item_filesize);
//listItemView.FileSize.setText(getFileSize(listFiles.get(position)));
convertView.setTag(listItemView);
}else {
listItemView = (ListItemView)convertView.getTag();
}
//1:not same item
File file = new File(listFiles.get(position));
if(file != null){
listItemView.FileNum.setText(position + 1 +"");
listItemView.FileName.setText(file.getName());
listItemView.FileSize.setText(getFileSize(file));
}
//2:set Select item by man, not auto, fuck
if(PlayListActivity.SelectPostion==position){
listItemView.Rlayout.setBackground(context.getResources().getDrawable(R.drawable.lexus_media_list_btn_p));
listItemView.FileNum.setTextColor(context.getResources().getColor(R.color.black));
listItemView.FileName.setTextColor(context.getResources().getColor(R.color.black));
listItemView.FileSize.setTextColor(context.getResources().getColor(R.color.black));
} else {
listItemView.Rlayout.setBackground(context.getResources().getDrawable(R.color.lucency));
listItemView.FileNum.setTextColor(context.getResources().getColor(R.color.white));
listItemView.FileName.setTextColor(context.getResources().getColor(R.color.white));
listItemView.FileSize.setTextColor(context.getResources().getColor(R.color.white));
}
return convertView;
}