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)方法上使用它。

如果我更改positionfinal有什么问题吗?有没有其他方法可以使用positionon onCheckedChanged

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 回答