我正在开发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
吗?
答案 0 :(得分:2)
没问题。使变量或参数最终意味着您无法为其重新赋值,例如:
position = ...
由于你没有在getView中为它分配任何值,这没关系。
答案 1 :(得分:2)
没问题,VansFannel实际上不需要声明为final。只有当我们不想在任何地方改变变量值时才需要最终修饰符。
答案 2 :(得分:1)
不,没有。通常position
仅用于定义应如何创建该特定位置的项目。我还没有看到getView()中的位置发生了变化。所以你可以安全地做到这一点。