2010-09-23 30 views
5

Tôi có một lớp được gọi khi ứng dụng của tôi khởi chạy.Android - findViewById (R.id.list) trả về null

public class MainActivity extends Activity implements NetworkEvent. 

Trong tình huống này,

list = (ListView) findViewById(R.id.list); 

tác phẩm hoàn hảo. Tuy nhiên, nếu sau đó tôi gọi một mục đích mới qua:

String[] names = object.names(); 

Intent myIntent = new Intent (MainActivity.this, SimpleList.class); myIntent.putExtra ("tên", tên); startActivityForResult (myIntent, 0);

nơi SimpleList được định nghĩa là:

public class SimpleList extends ListActivity implements NetworkEvent 

sau đó khi tôi gọi

list=(ListView) findViewById(R.id.list); 

Log.i ("MyApp", "Danh sách:" + danh sách);

từ bên trong lớp SimpleList, danh sách là null :(

Tại sao? Cả hai lớp nằm trong cùng một gói.

Cảm ơn.

Trả lời

16

Tôi không chắc chắn chính xác lý do tại sao nó đang xảy ra trong trường hợp của bạn, nhưng là ListView trong XML bố cục của bạn, phải được xác định là <ListView android:id="@android:id/list", không phải là <ListView android:id="@+id/list" điển hình. trong số này:

+0

Tuyệt vời! Cảm ơn bạn rất nhiều, đây là nó! – Dave

+1

Không hoạt động khi ListView được khởi tạo trong một con của FragmentActivity. Cùng một đối tượng null trả về. – Xeos

9

Đảm bảo bạn gọi setContentView(R.whatever) trước khi bạn có thể tìm thấy bất kỳ id nào trong đó.

+0

yup - đã làm việc cho tôi – sami

+0

cảm ơn người đàn ông ..... !!! – iAmLearning

+0

thực sự - cảm ơn! – ludwigmace

1

Trong trường hợp tương tự, findViewById ngừng hoạt động đối với tôi sau khi thêm chế độ xem LinearLayout.

Giải pháp là cũng để thêm những điều sau đây:

xmlns:android="http://schemas.android.com/apk/res/android"

để LinearLayout.

0

Thêm

"http://schemas.android.com/apk/res/android"

để ListView của bạn, ví dụ:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
    android:text="test" 
    android:layout_width="fill_parent" 
    android:layout_height="40dp"> 
    </TextView> 

    <ListView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">  
    </ListView> 

</LinearLayout> 
0

tôi chỉ muốn đề cập đến những gì vấn đề của tôi là. Trong XML của tôi, tôi đã chỉ định android:name="@+id/bob" thay vì android:id="@+id/bob", nhưng vì id @ +, nó vẫn đăng ký nó như là một trường không thể tách rời.

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