1

私は Android 3.1 アプリケーションを開発していますが、Android 開発に関しては非常に初心者です。

ListView で使用するカスタム配列アダプターを次に示します。

public class FormAdapter extends ArrayAdapter<Form>
{
    private Context context;
    private int layoutResourceId;
    private List<Form> forms;
    public ArrayList<String> checkedItems;
    private Button downloadButton;

    public ArrayList<String> getCheckedItems()
    {
        return checkedItems;
    }

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

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent)
    {
        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);
                        }
                        else
                        {
                            checkedItems.remove(checkedItems.indexOf(f.FormId));
                        }
                        downloadButton.setEnabled(checkedItems.size() > 0);
                    }
                });
            }
        }

        return row;
    }
}

私は最後の引数public View getView(int position, View convertView, ViewGroup parent)に変更する必要があります。positionメソッドで使用する必要があるため、実行しましたpublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked)

finalpositionに変更しても問題はありませんか? onを使用する他の方法はありますか?positiononCheckedChanged

4

3 に答える 3

2

問題ない。変数またはパラメータをfinalにすると、次のように値を再割り当てできなくなります。

position = ...

getViewで値を割り当てていないので、これで問題ありません。

于 2012-04-18T06:38:20.867 に答える
2

問題ありません VansFannel は実際に final として宣言する必要はありません。final 修飾子は、変数の値をどこでも変更したくない場合にのみ必要です。

于 2012-04-18T06:56:12.663 に答える
1

いいえ、ありません。通常position、その特定の位置にあるアイテムを作成する方法を定義するために使用されます。getView()で位置が変更されるのはまだ見ていません。だからあなたはそれを安全に行うことができます。

于 2012-04-18T06:50:27.363 に答える