listview.getview遇到奇怪的问题????

llller 2011-08-26 12:07:44
这是我重写的getView方法:
public View getView(int position, View convertView, ViewGroup parent) {
final int p2 = position;
ViewHolder holder = null;
// 1 start
if(convertView != null){
holder = (ViewHolder)convertView.getTag();
}else{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_folder_item, null);
holder.img = (ImageView) convertView
.findViewById(R.id.list_item_img);
holder.name = (TextView) convertView
.findViewById(R.id.list_item_name);
holder.isDir = (TextView) convertView
.findViewById(R.id.list_item_isDirectory);
holder.check = (CheckBox) convertView
.findViewById(R.id.list_item_check);

convertView.setTag(holder);
}
// 1 end

map = null;
map = (Map<String, Object>) lmap.get(position);

holder.img.setImageResource(Integer.parseInt(map.get("img") + ""));
holder.name.setText(map.get("name") + "");
holder.isDir.setText(map.get("isDir") + "");
if(holder.isDir.getText().equals(FileOpertion.FFILE)){
holder.name.setOnClickListener(new TextView.OnClickListener() {
public void onClick(View v) {
}
});
}

holder.check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton bv, boolean isChecked) {
if(isSelected.get(p2)){
isSelected.put(p2, false);
selectedList.remove(lmap.get(p2));
}else{
isSelected.put(p2, true);
selectedList.add(lmap.get(p2));
}
}
});

//是文件夹,隐藏checkbox,
if (holder.isDir.getText().toString().equalsIgnoreCase(FileOpertion.DIRECTORY)) {
// 22
Log.d("1111","1111111");
holder.check.setVisibility(View.INVISIBLE);
}

return convertView;
}

final static class ViewHolder {
public ImageView img;
public TextView name;
public TextView isDir;
public CheckBox check;
public ViewHolder() {
}
}

按以上写法,在遇到大量FFILE类型的文件时( 50+个FFILE类型文件算多吗???? ),就在当前listItem中显示checkbox;
但是在显示时出了问题,有的FFILE类型的listitem项里没有checkbox;
我以为是我程序有问题,当我重复打开这个页面时,每次打开出现问题的listItem都不同,数量也不同,而是随机的.

当我把 1 位置的代码换成:
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_folder_item, null);
holder.img = (ImageView) convertView
.findViewById(R.id.list_item_img);
holder.name = (TextView) convertView
.findViewById(R.id.list_item_name);
holder.isDir = (TextView) convertView
.findViewById(R.id.list_item_isDirectory);
holder.check = (CheckBox) convertView
.findViewById(R.id.list_item_check);
convertView.setTag(holder);
就是把if去掉;

就没有上面说的问题了,但是性能又受到影响...
上面两次实验, 22 位置的debug信息都没有出现,证明不是程序主动去隐藏的;

现在我混乱了..这是怎么回事啊?
...全文
114 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
llller 2011-08-29
  • 打赏
  • 举报
回复
没有人懂???

我整理下代码:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
// 1 start
if(convertView != null){
holder = (ViewHolder)convertView.getTag();
}else{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_folder_item, null);
holder.img = (ImageView) convertView
.findViewById(R.id.list_item_img);
holder.name = (TextView) convertView
.findViewById(R.id.list_item_name);
holder.check = (CheckBox) convertView
.findViewById(R.id.list_item_check);
convertView.setTag(holder);
}
// 1 end

holder.img.setImageResource(Integer.parseInt(map.get("img") + ""));
holder.name.setText(map.get("name") + "");
holder.check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton bv, boolean isChecked) {
if(....){
....
}else{
....
}
}
});

//非FFILE类型,隐藏checkbox,
if (!holder.name.getText().toString().endsWith(FileOpertion.FFILE)) {
// 22
Log.d("1111","1111111");
holder.check.setVisibility(View.INVISIBLE);
}

return convertView;
}

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧