带有复选框问题的Android自定义列表视图

时间:2014-11-27 01:18:31

标签: android

现在我正在为我的课程项目开发一个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;
}

}

有关如何解决问题的建议吗?

由于

0 个答案:

没有答案
相关问题