![](/img/trans.png)
[英]Cannot refer to a non-final variable i inside an inner class defined in a different method
[英]Cannot refer to a non-final variable LinearLayout inside an inner class defined in a different method
我的代码出现此错误。 我试图实施有关此主题的建议,但对我而言没有帮助。 因为我必须通过LinearLayout
和视图才能删除该视图。 由于无法在运行时传递新值,因此无法制作LinearLayout
ll并无法查看最终值。 有什么建议可以实现吗? 多谢你们。
我的方法:
private void addControls(String name, LinearLayout ll, String namevalue) {
View view = new View(this);
//getBaseContext();
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.edit_phone, null);
EditText edit_phone = (EditText) view.findViewById(R.id.txtEditPhone);
edit_phone.requestFocus();
edit_phone.setText(name, TextView.BufferType.NORMAL);
TextView nametext = (TextView) view.findViewById(R.id.NameTextView);
nametext.setText(namevalue, TextView.BufferType.NORMAL);
ImageButton imagedelete = (ImageButton) view.findViewById(R.id.CancelButton);
imagedelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ll.removeView(view);
}
}) ;
ll.addView(view);
}
onCreate的方法实现如下:
if (memberModel.email.toLowerCase().equals(email))
{
selPer = memberModel.name;
getActionBar().setTitle(selPer);
if(tNumList.size() >= 1)
{
for (int i = 0; i < tNumList.size(); i++)
{
String officePhone = tNumList.get(i).telephoneNumber;
LinearLayout telephoneListView = (LinearLayout) findViewById(R.id.phoneHolder);
addControls(officePhone, telephoneListView, "Phone");
}
}
if(mNumList.size() >= 1)
{
for (int i = 0; i < mNumList.size(); i++)
{
String cellPhone = mNumList.get(i).mobileNo;
LinearLayout mobileListView = (LinearLayout) findViewById(R.id.mobileHolder);
addControls(cellPhone, mobileListView, "Mobile");
}
}
txtOfficeAddress.setText(memberModel.officeAddress, TextView.BufferType.NORMAL);
txtHomeAddress.setText(memberModel.homeAddress, TextView.BufferType.NORMAL);
}
valueTextView.setText(email);
ImageButton imageAddPhone = (ImageButton) findViewById(R.id.AddButton);
imageAddPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout telephoneListView = (LinearLayout) findViewById(R.id.phoneHolder);
addControls(null, telephoneListView, "Phone");
}
}) ;
ImageButton imageAddMobile = (ImageButton) findViewById(R.id.AddButton1);
imageAddMobile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout MobileListView = (LinearLayout) findViewById(R.id.mobileHolder);
addControls(null, MobileListView, "Mobile");
}
}) ;
任何带有解释的解决方案都会有所帮助。
只需添加final
限定词即可。 final LinearLayout ll
和final View view = layoutInflater...
只要您不更改对对象的引用,就可以将它们定为final
。
在主类中声明您的LinearLayout并在整个类中使用它。
解决了...如果有人需要解决方案,那就是...。
声明View view;
在addControl方法外部,并在addControl方法中将其初始化,例如view = new View(this);
。
然后,添加onClick @Override
LinearLayout parent = (LinearLayout)v.getParent();
LinearLayout grandParent=(LinearLayout)parent.getParent();
grandParent.removeView(parent); in place of ll.removeView(view);
全部完成,很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.