当我编写android时,我遇到了以下事情
@Override public View getView(final int position, View convertView, ViewGroup parent) { convertView = _inflater.inflate(R.layout.abstract_list_row_item, null); move.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // if btn is clcked then data is changed an we need to refresh framents MainAppDataController.getInstance().setIsDataChanged(true); callWhiteListDB = new CallWhiteListDB(_context); callWhiteListDB.openToWrite(); callWhiteListDB.insert(allContacts.get(position).name, allContacts.get(position).number); callWhiteListDB.close(); callBlackListDB = new CallBlackListDB(_context); callBlackListDB.openToWrite(); callBlackListDB.deleteSingleItem(allContacts.get(position).dbId); callBlackListDB.close(); populateList(position); notifyListView(view); } }); return convertView;
在上面的示例中,getView()
方法有像int position,View convertView,ViewGroup parent这样的参数.我的观察是在我开始使用位置变量时onclick()
,Eclipse抛出编译错误并要求将位置作为final.我为什么要把它作为最终版?AFAIK final用于常量.
final
在方法参数中使用,以使引用 在传递给方法后不可更改.这是保护传递参数的专门方法.因此,接收方法将无法使用新对象或值重新初始化它
您正在使用position
您的匿名内部类.因此,要求该职位是最终的.
匿名类无法访问其未声明为final
有效最终的封闭范围中的局部变量.
最终修饰符表示此字段的值不能更改.
http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html