0

我正在开发一个 Android 3.1 应用程序。我对 Android 开发非常陌生。

我有一个ListActivity哪些项目定义如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <CheckBox
        android:id="@+id/itemCheckBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

ListActivity显示了一个表单的列表。用户可以选择(检查checkbox)一个或多个表格并下载它们。

下载表格后,我想将它们从列表中删除。为此,我使用updateFormsNotDownloadedat FormAdapter

    public class FormAdapter extends ArrayAdapter<Form>
    {
        private Context context;
        private int layoutResourceId;
        private ArrayList<Form> forms;
        private ArrayList<Integer> checkedItemsPosition;
        private Button downloadButton;

        public ArrayList<Integer> getCheckedItemsPosition()
        {
            return checkedItemsPosition;
        }

        public String[] getSelectedFormsId()
        {
            String[] ids = new String[checkedItemsPosition.size()];
            int i = 0;
            for(Integer pos : checkedItemsPosition)
            {
                Form f = forms.get(pos.intValue());
                ids[i] = f.FormId;
                i++;
            }
            return ids;
        }

        /**
         * Called when selected forms has been downloaded and save it locally correctly.
         */
        public void updateFormsNotDownloaded()
        {
            for(Integer pos: checkedItemsPosition)
                remove(forms.get(pos.intValue()));
            checkedItemsPosition.clear();
            notifyDataSetChanged();
        }

        public FormAdapter(Context context, int textViewResourceId,
                ArrayList<Form> objects, Button downloadButton)
        {
            super(context, textViewResourceId, objects);

            this.context = context;
            this.layoutResourceId = textViewResourceId;
            this.forms = objects;
            this.checkedItemsPosition = new ArrayList<Integer>();
            this.downloadButton = downloadButton;
        }

        @Override
        public int getCount()
        {
            return forms.size();
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent)
        {
            Log.v("FormAdapter", "getView.postion: " + position);
            View row = convertView;
            if (row == null)
            {
                LayoutInflater inflater = ((Activity)context).getLayoutInflater();
                row = inflater.inflate(layoutResourceId, parent, false);
            }

            Form f = forms.get(position);
            if (f != null)
            {
                CheckBox checkBox = (CheckBox)row.findViewById(R.id.itemCheckBox);
                if (checkBox != null)
                {
                    checkBox.setText(f.Name);
                    checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
                    {
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked)
                        {
                            //Form f = forms.get(position);
                            if (isChecked)
                            {
                                //checkedItems.add(f.FormId);
                                checkedItemsPosition.add(new Integer(position));
                            }
                            else
                            {
                                //checkedItems.remove(checkedItems.indexOf(f.FormId));
                                int index = checkedItemsPosition.indexOf(new Integer(position));
                                if (index > -1)
                                    checkedItemsPosition.remove(index);
                            }
                            downloadButton.setEnabled(checkedItemsPosition.size() > 0);
                        }
                    });
                }
            }

            return row;
        }
    }
}

想象一下,我有以下列表:

  1. 表格 1. (勾选)
  2. 表格 2。
  3. 表格 3。

用户选择表单 1,当表单在本地保存updateFormsNotDownloaded并被调用时,我看到了这个:

  1. 表格 2. (勾选)
  2. 表格 3。

为什么要检查表格 2?如何取消选中所有?

4

1 回答 1

1

您应该检查是否应该检查该位置并为每个位置手动设置检查值。我在任何地方都没有看到你在这样做..

前任。

//we set the OnCheckedChangeListener to null so that setting the checkbox value doesn't trigger the checkedChangelistener
//this may or may not be relevant for your project
checkBox.setOnCheckedChangeListener(null); 
checkbox.setChecked(checkedItemsPosition.contains(position));
checkBox.setText(f.Name);
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
      {
        //the rest of your code here
      }
}
于 2012-04-18T14:04:42.380 回答