这是我重写的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信息都没有出现,证明不是程序主动去隐藏的;现在我混乱了..这是怎么回事啊?
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信息都没有出现,证明不是程序主动去隐藏的;现在我混乱了..这是怎么回事啊?
解决方案 »
- android C程序问题?
- 一个关于打包成JAR包后的问题
- repo sync时的一个错误
- 想在后台service中监听到长按back键的动作?有没有人知道如何实现?100分
- webview加载页面为什么不用另开一个线程?
- android 开发 UI图片点击弹出,弹出的图片支持手势放大缩小
- android 导入jar包出现的问题
- 新手写的Android计算器,快一个礼拜了都没搞定,急求!!!
- 求助!全志方案pack打包镜像出错,Dragon execute image.cfg Failed ! ArgCnt = 3, 400
- 求各路大神指点得不到网上数据,报volley错误的问题
- 牛人,高手,大侠!!!快来收拾这个诡异的问题!!!
- 手机连上电脑了但是file explorer视图中不显示手机的sdcard内容。
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;
}