2012-03-03 45 views
11

trong ứng dụng Java Android làm cách nào tôi có thể truy cập các biến của lớp ngoài từ lớp ẩn danh bên trong? Ví dụ:biến truy cập của lớp bên ngoài trong Java

ProgressDialog dialog = new ProgressDialog(this); 
    ..... 
    send.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) { 

      //here i'd like to do something with **dialog** variable 
      ....... 

     } 
    }); 

Trả lời

19

Nếu biến thoại là một lĩnh vực của lớp bên ngoài, bạn có thể sử dụng this bắt đầu bằng tên lớp bên ngoài (a qualified this):

send.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 
     ProgressDialog dlg = OuterClass.this.dialog; 
     ....... 
    } 
}); 

Ngoài ra, nếu biến dialiog là biến cục bộ cần phải được đánh dấu là cuối cùng:

final ProgressDialog dialog = new ProgressDialog(this); 
..... 
send.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 
     // The dialog variable is in scope here ... 
     dialog.someMethod(); 
    } 
}); 
+0

Đây là câu trả lời đúng khi 'hộp thoại' là một trường của lớp ngoài. Tôi nghĩ trong trường hợp này, nó là một biến cục bộ trong phương thức xung quanh lớp bên trong. –

5

Tạo biến cục bộ bên ngoài (dialog) final để bạn có thể tham khảo nó từ lớp bên trong.

1

Nếu đó là biến cục bộ (như chữ ký gợi ý), cần phải là final để lớp bên trong có thể truy cập vào nó. Nếu đó là biến thành viên, công cụ sửa đổi hiển thị cần phải là mặc định (không có công cụ sửa đổi) hoặc cao hơn (được bảo vệ hoặc công khai). Với private -modifier, nó vẫn hoạt động, nhưng bạn có thể nhận được một cảnh báo (tùy thuộc vào trình biên dịch-settings của bạn):

đọc truy cập vào kèm theo SomeClass.someField trường được mô phỏng bởi một phương pháp tổng hợp accessor

+1

Phần về biến thành viên không đúng. Các lớp bên trong có thể truy cập các thành viên riêng của lớp kèm theo - trình biên dịch tạo ra các trình truy cập ẩn cho các thành viên đó. – casablanca

+0

@casablanca: đúng, tôi đã chỉnh sửa câu trả lời – esaj

Các vấn đề liên quan