10

Ich bekomme einen Fehler Ich weiß nicht warum. Ich beziehe ListView mit Array-Adapter von String in Fragment. Ich verwende dieses Fragment als Hauptbildschirm in Haupttätigkeit gezeigt werden Dies ist mein CodeArrayAdapter 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; 
} 
} 

ich diesen Ausgang Fehler:

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 

Antwort

7

lvHomePage muss null sein. Verwenden Sie stattdessen lvHomePage = (ListView) view.findViewById(R.id.lvHomePage);.

2

Das Problem ist, innerhalb lvHomePage = (ListView) getActivity().findViewById(R.id.lvHomePage); , was falsch ist Sie die Root-Ansicht view ist nicht die Aktivität erhalten sollte so sollte es so

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

4

Versuchen Sie, diese Art und Weise

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

als AIL sein sagte, ich sollte view anstelle von getActivity() verwenden – KiKo

Verwandte Themen