Reputation: 14112
I've created a new project with Android Studio v3.2, used API 18 and it created the default app just fine.
I added a spinner to the fragment
file (First time I am using it, I am not sure if this is the problem).
No I simply wanted to add some dummy items to the spinner on the fly but my app keeps crashing with Unofrotunately....has stopped message.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app_start);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
//Just added this!
String[] movies = new String[]{"one, two, three"};
ArrayAdapter<String> movieAdapter = new ArrayAdapter<String>(this, R.id.app_start_select_movie_spinner, movies );
Spinner spinner = (Spinner)findViewById(R.id.app_start_select_movie_spinner);
spinner.setAdapter(movieAdapter);
}
Here is the message in logcat:
11-06 23:57:29.174 16743-16743/org.pervasivesystems.nexusmosaic E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.pervasivesystems.nexusmosaic/org.pervasivesystems.nexusmosaic.activity_app_start}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at org.pervasivesystems.nexusmosaic.activity_app_start.onCreate(activity_app_start.java:32)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
line 32 is:
spinner.setAdapter(movieAdapter);
So basically the spinner
is null...somehow it couldnt be assigned
It might be very simple but I couldnt figure it out :(
Upvotes: 0
Views: 634
Reputation: 2630
You are using the same resource for both the spinner and the adapter spinner item (which expects a pointer to a layout resource file, not a view object).
ArrayAdapter<String> movieAdapter = new ArrayAdapter<String>(this, R.id.app_start_select_movie_spinner, movies );
Spinner spinner = (Spinner)findViewById(R.id.app_start_select_movie_spinner);
Instead, try:
ArrayAdapter<String> movieAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, movies );
Spinner spinner = (Spinner)findViewById(R.id.app_start_select_movie_spinner);
Also, try moving adapter initialisation into your fragment's onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.your_fragment, container, false);
String[] movies = new String[]{"one, two, three"};
ArrayAdapter<String> movieAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, movies );
Spinner spinner = (Spinner)rootView.findViewById(R.id.app_start_select_movie_spinner);
spinner.setAdapter(movieAdapter);
return rootView;
}
For accessing the fragment from the activity, have a look at the fragment google dev docs.
In essence, you can get the fragment's root view from your activity by using the following code, but it can be a bit hit and miss:
YourFragment yourFragment = (YourFragment) getFragmentManager().findViewById(R.id.your_fragment);
if(yourFragment != null)
{
View fragmentRootView = (View) yourFragment.getView();
//do your manipulation here.
}
Upvotes: 2