10

Tôi gặp phải một số lỗi Tôi không biết tại sao. Tôi đang populating ListView với bộ điều hợp mảng từ chuỗi trong đoạn. Tôi đang sử dụng đoạn này như màn hình chính để được hiển thị trong hoạt động chính Đây là mã của tôiArrayAdapter in Fragment - Android

public class HomePage extends Fragment { 

private ListView lvHomePage; 
private String[] items; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_home_page, container, false); 

    items = getActivity().getResources().getStringArray(R.array.test); 
    lvHomePage = (ListView) getActivity().findViewById(R.id.lvHomePage); 

    lvHomePage.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(), 
    android.R.layout.simple_list_item_1 , items)); 

    return view; 
} 
} 

tôi nhận được lỗi sản lượng này:

09-18 21:07:27.315: E/AndroidRuntime(3839): FATAL EXCEPTION: main 
09-18 21:07:27.315: E/AndroidRuntime(3839): Process: com.kiko.bmgu.crnobelo, PID: 3839 
09-18 21:07:27.315: E/AndroidRuntime(3839): java.lang.RuntimeException: Unable to start activity ComponentInfo  com.kiko.bmgu.crnobelo/com.kiko.bmgu.crnobelo.activities.MainActivity}: java.lang.NullPointerException 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)\ 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.os.Handler.dispatchMessage(Handler.java:102) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.os.Looper.loop(Looper.java:136) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at dalvik.system.NativeStart.main(Naive Method) 
09-18 21:07:27.315: E/AndroidRuntime(3839): Caused by: java.lang.NullPointerException 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at com.kiko.bmgu.fragments.HomePage.onCreateView(HomePage.java:25) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.Fragment.performCreateView(Fragment.java:1700) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.BackStackRecord.run(BackStackRecord.java:684) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.Activity.performStart(Activity.java:5240) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168) 
09-18 21:07:27.315: E/AndroidRuntime(3839):  ... 11 more 

Trả lời

7

lvHomePage phải null. Sử dụng lvHomePage = (ListView) view.findViewById(R.id.lvHomePage); để thay thế.

2

Vấn đề là trong vòng lvHomePage = (ListView) getActivity().findViewById(R.id.lvHomePage); đó là sai, bạn sẽ nhận được xem gốc là view không phải là hoạt động vì vậy nó phải như thế này

lvHomePage = (ListView) view.findViewById(R.id.lvHomePage);

4

Hãy thử cách này

private ListView lvHomePage; 
    private String[] items; 
    private View view; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_home_page, container, false); 

    return view; 
} 

@Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

    items = view.getResources().getStringArray(R.array.test); 
    lvHomePage = (ListView) view.findViewById(R.id.lvHomePage); 

    lvHomePage.setAdapter(new ArrayAdapter<String>(view.getContext(), 
    android.R.layout.simple_list_item_1 , items)); 
    ... 
} 
+0

như AIL đã nói, tôi nên sử dụng chế độ xem thay vì getActivity() – KiKo