ArrayAdapter:getView参数变量更改为final

时间:2012-04-18 06:34:51

标签: android listview android-arrayadapter

我正在开发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)方法上使用它。

如果我将position更改为最终,是否有任何问题? 还有其他方法可以在position上使用onCheckedChanged吗?

3 个答案:

答案 0 :(得分:2)

没问题。使变量或参数最终意味着您无法为其重新赋值,例如:

position = ...

由于你没有在getView中为它分配任何值,这没关系。

答案 1 :(得分:2)

没问题,VansFannel实际上不需要声明为final。只有当我们不想在任何地方改变变量值时才需要最终修饰符。

答案 2 :(得分:1)

不,没有。通常position仅用于定义应如何创建该特定位置的项目。我还没有看到getView()中的位置发生了变化。所以你可以安全地做到这一点。