作者:嗯明天娶你 | 来源:互联网 | 2023-05-19 15:45
一、做listview的时候,遇到出现重复的view,比如总数为10,最大显示为5,则listview显示为1、2、3、4、5、1、2、3、4、5等循环的;我们需求的为显示1、2、3、4、5、6、7、
一、做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) {}的外面来即可,否则会一直使用初始化的时候的那个值
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;
}