在编写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会抛出编译错误并询问make最终的位置。我为什么要把它作为最终版? AFAIK final用于常量。
答案 0 :(得分:9)
final
将引用 不可更改传递给方法后。这是保护传递参数的专门方法。因此,接收方法将无法使用新对象或值重新初始化
答案 1 :(得分:5)
您在匿名内部类中使用position
。因此,要求该职位是最终的。
匿名类无法访问其封闭范围内未声明为final
或有效最终的局部变量。
最终修饰符表示此字段的值不能更改。
http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
答案 2 :(得分:1)
我们对方法参数使用final
关键字,以防止方法内的代码修改该参数的值。
答案 3 :(得分:0)
final使你的变量保持不变。
当你的onclick方法在这个函数结束后被调用,你的变量不再存在,所以当你使用一个最终变量时,它的常量值会在onclick里面传递。
答案 4 :(得分:0)
可以使用关键字final声明java变量。那么 最终变量只能分配一次。
声明为final且未初始化的变量称为a 空白的最终变量。空白的最终变量强制构造函数 初始化它。
声明为final的Java类无法扩展。限制 继承!
无法覆盖声明为final的方法。在方法私人是 等于最终,但在变量中则不是。
最终参数 - 参数值后无法更改 初始化。做一个小的java练习来找出其含义 方法覆盖中的最终参数。
Java本地类只能引用局部变量和参数 被宣布为最终的。
有关详细信息,请参阅this
答案 5 :(得分:0)
因为getView
在listView
充气布局时调用了onClick
...当您按下view (move)
时调用position
...当时onClick被触发,getView
中的变量position
已被销毁...通过最终确定{{1}}的值,以便以后使用