簡體   English   中英

無法以不同方法定義的內部類中引用非最終變量LinearLayout

[英]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 llfinal 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM