2011-12-15 37 views
34

Tôi có 2 Hoạt động: Người dùng hoạt động đầu tiên nhấp vào nút khởi chạy hoạt động thứ 2. Hoạt động thứ 2 thực hiện tất cả công việc.onTạo không được gọi là

Tôi khởi chạy Hoạt động thứ 2 như sau bên trong Lớp bên trong onClickListener và tôi đã thử gọi nó một cách rõ ràng với (FirstActivity.this, Simple.Class) nhưng điều tương tự cũng xảy ra.

Intent test = new Intent(arg0.getContext(),Simple.class); 
    startActivity(test); 

Trên trình mô phỏng, tôi nhìn thấy màn hình màu đen nhưng không có gì được tải từ bố cục của tôi. Tôi nhìn vào logcat và tôi thấy một số thông điệp lỗi không kết nối. Đây là chức năng onCreate từ hoạt động thứ 2 của tôi, nhưng tôi không nhận được bất kỳ kết quả từ một trong hai màn hình hoặc logcat thấy tôi rằng các chức năng Log được gọi là:

public void onCreate(Bundle savedState) 
    { 
     Log.d("SimpleActivity","OnCreate Started"); 

     super.onCreate(savedState); 
    setContentView(R.layout.simple); 

     Log.d("SimpleActivity","OnCreate Ended"); 
    } 

Lưu ý: Tôi đã kêu gọi các nhà xây dựng cơ sở trong OnCreate() với super.onCreate (savedState) trong mã của tôi ở trên.

+0

đăng một số mã khác để chúng tôi có thể xem arg0 là gì. Bạn có lẽ không nên sử dụng bất cứ điều gì đó. Sử dụng YourActivity.đây là ngữ cảnh để chuyển sang mục đích mới. – FoamyGuy

+0

Bạn đã giải quyết vấn đề này chưa? Bạn có một mảnh bên trong khung nhìn đang được khởi tạo trực tiếp không? –

Trả lời

123

gì xảy ra với tôi là tôi đã trọng sai phương pháp onCreate. Tôi đã ghi đè public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) khi tôi thực sự cần ghi đè protected void onCreate(@Nullable Bundle savedInstanceState). Có lẽ điều này có thể giúp một ai đó!

+13

Cảm ơn bạn, đó thực sự là nó! – mrpeardotnet

+11

3 năm vẫn làm sai lầm ngớ ngẩn ..: D –

+1

Lỗi ngu ngốc này đã cho tôi ít nhất một giờ để tìm ... Damn you, 'public void onCreate'! –

0

bạn nên @ Override onCreate và thêm super.onCreate() trong đó

@Override 
public void onCreate(Bundle savedState) 
{ 
    super.onCreate(savedState); 

    Log.d("SimpleActivity","OnCreate Started"); 
    setContentView(R.layout.simple); 
    Log.d("SimpleActivity","OnCreate Ended"); 
} 
+5

Trong mẫu mã của bạn, nó nói hai lần "super.onCreate (savedState);" bây giờ .. –

0

Bạn cần phải gọi phương thức super.onCreate(savedState). Hãy xem Activity doc.

public void onCreate(Bundle savedState) 
    { 
    super.onCreate(savedState); 
    } 
1

Có thể là onCreate không được gọi, nếu hoạt động này chưa bao giờ bị phá hủy, nếu vì một lý do một hoạt động treo xung quanh, thời gian tới instantiated của nó không được tái tạo nhưng lại tiếp tục thay ...

Ít nhất đó là những gì im Xử lý ngay bây giờ trong mã của tôi ... Vòng đời của các hoạt động dường như là một lời giải thích hợp lý tốt .. Tuy nhiên 99% thời gian tôi dựa vào onCreate được gọi khi startingActivity và nó không làm tôi thất vọng ....

Chỉnh sửa: Và tất nhiên là vì tôi không gọi kết thúc() khi thoát khỏi acti vity. Doh.

+0

Câu trả lời này cho tôi một đầu mối để khắc phục sự cố của tôi. Trong trường hợp của tôi, Activity kết thúc trên một điều kiện của một lá cờ đối tượng và điều này được đặt trong mã runnable của trình xử lý. Nhưng đối tượng này trở thành null trước khi thực thi runnable. Cảm ơn vì điều đó. – jrhamza

0

này không liên quan đến vấn đề nhất định này, nhưng điều này cũng có thể xảy ra khi hoạt động không được khai báo trong file manifest)

0

Hãy cẩn thận nếu phương pháp của bạn thuộc về AppCompatActivity hoặc Hoạt động.

Đó là vào những gì bạn thực hiện để lớp

của bạn Nếu bạn muốn thêm vòng đời hoặc bất kỳ ghi đè phương pháp này, tôi khuyên bạn nên nhấn CTRL+O hoặc làm Code > Override methods và ở đó bạn có thể thấy nơi phương pháp thuộc

Screenshot for illustrative purposes - Android Studio's "Methods to Override" dialog

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