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フォームのリストを表示します。ユーザーは、checkbox1 つまたは複数のフォームを選択して (その をチェックして)、それらをダウンロードできます。

フォームがダウンロードされたら、リストから削除したいと思います。それを行うには、 at を使用updateFormsNotDownloadedFormAdapterます。

    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 に答える