ListView 里面getView()的参数final来修饰的原因

本博客致力于成为学习工作的参考文档


	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {

		ViewHolder holder = null;
		if (convertView == null) {
			LayoutInflater layoutInflater = LayoutInflater.from(context);
			convertView = layoutInflater.inflate(
					R.layout.list_item_custominfo_show, null);

			holder = new ViewHolder();
			holder.customName_text = (TextView) convertView
					.findViewById(R.id.customName_text);
			holder.customAddress_text = (TextView) convertView
					.findViewById(R.id.customAddress_text);
			holder.editBtn = (Button) convertView.findViewById(R.id.editBtn);
			holder.editBtn.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					Intent intent = new Intent(context,
							UpdataCustomerInfo.class);
					intent.putExtra("id", position);
					context.startActivity(intent);
				}
			});

			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.customName_text.setText(Data.customerNameList.get(position));
		holder.customAddress_text.setText(Data.customerAddressList
				.get(position));

		return convertView;
	}

如果把getView()方法里面的参数position的final修饰符去掉,就会显示intent.putExtra("listId", position)编译错误, 因为position是方法定义的局部变量,当方法返回时,局部变量position对应的栈就被回收了,而方法里面的内部接口OnClickListener试图访问getView()方法里面的非final变量就会发生错误,当在变量前加上final时,变量就不在是真的变量了,成了常量,这样在编译器进行编译时(即编译阶段)就会用变量的值来代替变量,这样就不会出现变量清除后,再访问变量的错误。

你可能感兴趣的:(android)