Wednesday, April 18, 2012

ArrayAdapter: getView argument variable changed to final

I'm developing an Android 3.1 application and I'm very very new on Android development.



Here is a custom array adapter to use in a 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;
}
}


On public View getView(int position, View convertView, ViewGroup parent) I have to change to final position argument. I have done it because I need to use it on public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) method.



Is there any problem if I change position to final?
Is there any other way to use position on onCheckedChanged?





No comments:

Post a Comment