2012-01-06 31 views
9

Sử dụng nhật thực và SDK Android, tôi đã quản lý một ứng dụng thử nghiệm đơn giản với Nút và ProgressBar. Tất cả chạy tốt, ngoại trừ tôi không muốn ProgressBar di chuyển nút, khi ProgressBar được hiển thị, vì vậy chỉ để thử nghiệm tôi đã thay đổi thứ tự mà chúng được định nghĩa trong tệp res/layout/main.xml (sử dụng LinearLayout). Biên dịch và chạy tôi sau đó nhận được một ClassCastException tại "cuối cùng ProgressBar ..." dòng dưới đây.Thay đổi thứ tự trong tệp main.xml, bây giờ tôi nhận được ClassCastException

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    /* 01-06 14:37:39.590: E/AndroidRuntime(863): java.lang.RuntimeException: 
     java.lang.ClassCastException: android.widget.Button cannot be cast to 
     android.widget.ProgressBar */ 
    final ProgressBar progressbar = (ProgressBar) findViewById(R.id.progressBar1); /* here */ 
    progressbar.setVisibility(ProgressBar.GONE); 

    final Button exebutton = (Button)findViewById(R.id.button1); 
    exebutton.setOnClickListener(new View.OnClickListener() 
    // etc... 

Bây giờ, tôi hiểu những gì ClasCastException nói và có nghĩa là, tôi chỉ không hiểu tại sao nó xuất hiện. Tôi không cố gắng tạo một Button cho ProgressBar. Tôi không hiểu ...

+0

bạn cũng có thể thêm tệp main.xml của mình không? Có vẻ như bạn đang cố gắng truyền một Button thành ProgressBar. – Ivan

+1

Không, tôi không, ít nhất là ý thức (xem bài đăng). Đó là R.java không được cập nhật, xem bên dưới. – OppfinnarJocke

+0

Cố gắng dọn dẹp và xây dựng lại dự án của bạn. Và dán tệp main.xml để chúng tôi có thể kiểm tra xem có vấn đề nào khác không (cố gắng loại bỏ một đối tượng và thêm lại nó). – Ivan

Trả lời

20

Hãy thử làm sạch dự án để lớp R được tạo lại. Đôi khi các giá trị không cập nhật.

+1

+1 để vệ sinh. SDK Android có thể bị "lẫn lộn" vào những thời điểm - đây là một trong số đó. Nó thường tốt nhất để làm sạch khi thực hiện thay đổi cho các tập tin XML. Giữa hành vi mặc định của Eclipse, và những gì SDK làm, tôi thấy dự án thường bị lỗi xây dựng hoặc lỗi thời gian chạy. Khi nghi ngờ, "sạch" ... –

+1

Ah! Làm sạch nó. Cảm ơn – OppfinnarJocke

+1

Tuyệt vời. Hãy xem xét chấp nhận câu trả lời để nó không được trả lời. – sfratini

6

Dường như dòng này:

final ProgressBar progressbar = (ProgressBar) findViewById(R.id.progressBar1); /* here */ 

được đúc một Button vào progressbar.

Điều này có nghĩa là findViewById trả về nút cho R.id.progressBar1.

Vì bạn đang nói rằng bạn đã thay đổi thứ tự, điều này có vẻ id này vẫn tương ứng với nút. Điều này dẫn đến sự cố với tệp được tạo. Tôi sẽ làm một dự án/sạch.

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