现在我正在为我的课程项目开发一个Android应用程序。此应用程序将用于将文件上传到Yahoo!网络托管服务器。现在,我遇到自定义列表视图的问题,我的" FileBrowserActivity"的复选框。问题是我的复选框总是在每次单击listview项目时都取消选中 - 一个目录/文件夹来查看其内容。似乎复选框状态永远不会被保存。我试图使用boolean checkedState数组和ViewHolder类,但我没有运气。以下是截图的链接以解释问题。我希望它有所帮助:
1. http://imgur.com/is43t29。在此屏幕截图中,我检查了listview中最后两个项目的2个复选框
2. http://imgur.com/T6JMzRt。在上面的步骤之后,我点击了"铃声"文件夹,并选择其中的所有三个项目。
(我无法发布2个以上的链接。我会在评论中发布第3个链接。)
以下是我的代码: 1.这是我的自定义适配器类
public class FileArrayAdapter extends ArrayAdapter<ListDescription>{
private Context context;
private boolean[] checkBoxStates;
private int id;
private List<ListDescription> items;
public FileArrayAdapter(Context context, int resource,List<ListDescription> objects) {
super(context, resource, objects);
this.context = context;
this.id = resource;
this.items = objects;
this.checkBoxStates = new boolean[objects.size()];
}
public ListDescription getItem(int i){
return items.get(i);
}
private class ViewHolder{
TextView listItemTxt;
TextView listSubItemTxt;
CheckBox cb;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder = null;
if(v == null){
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(id, null);
holder = new ViewHolder();
holder.listItemTxt = (TextView) v.findViewById(com.example.shareit.R.id.fileListItem);
holder.listSubItemTxt = (TextView) v.findViewById(com.example.shareit.R.id.fileListSubItem);
holder.cb = (CheckBox) v.findViewById(com.example.shareit.R.id.checkBox1);
v.setTag(holder);
/*holder.cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox c = (CheckBox) v;
ListDescription ldes = (ListDescription) c.getTag();
Toast.makeText(getContext(), "Clicked on checkbox: " + ldes.getName(),
Toast.LENGTH_LONG).show();
ldes.setSelected(c.isChecked());
}
});*/
}
else{
holder = (ViewHolder) v.getTag();
}
final ListDescription o = items.get(position);
if(o != null){
/*TextView t1 = (TextView) v.findViewById(com.example.shareit.R.id.fileListItem);
TextView t2 = (TextView) v.findViewById(com.example.shareit.R.id.fileListSubItem);
CheckBox cb = (CheckBox) v.findViewById(com.example.shareit.R.id.checkBox1);*/
//if(t1 != null){
if(holder.listItemTxt != null){
//t1.setText(o.getName());
holder.listItemTxt.setText(o.getName());
}
//if(t2 != null){
if(holder.listSubItemTxt != null){
//t2.setText(o.getData());
holder.listSubItemTxt.setText(o.getData());
}
holder.cb.setChecked(checkBoxStates[position]);
if(o.getData().equalsIgnoreCase("folder") || o.getData().equalsIgnoreCase("parent directory")){
//cb.setVisibility(View.GONE);
holder.cb.setVisibility(View.GONE);
//holder.cb.setTag(o);
}
else{
//cb.setVisibility(View.VISIBLE);
holder.cb.setVisibility(View.VISIBLE);
//holder.cb.setTag(o);
}
holder.cb.setTag(position);
}
return v;
}
}
有关如何解决问题的建议吗?
由于