I got lots of NPEs and was wondering how you manage this common task.
There is a button in my fragment, here the WelcomeFragment.
The button will clicked and the event is handled in the MainActivity class.
The fragment is a NPE, the view, too ...
Here is my code snippet of my MainActivity:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
...
WelcomeFragment welcomeFragment = (WelcomeFragment) getFragmentManager().findFragmentByTag(WelcomeFragment.WELCOME_FRAGMENT_TAG);
if (welcomeFragment == null){
welcomeFragment = new WelcomeFragment();
}
View view = welcomeFragment.getView();
if (view == null){
view = new View(this);
}
TextView text1 = (TextView) view.findViewById(R.id.welcomeFragmentHeader);
text1.setText(newTextToShow + resStr);
break;
...
I'm assuming your app crashes with an NPE the first time you click this button, when there is no WelcomeFragment instance:
(WelcomeFragment) getFragmentManager().findFragmentByTag(WelcomeFragment.WELCOME_FRAGMENT_TAG);
returns null, so you enter the if statement and construct a WelcomeFragment.
This is not the right way to make a fragment. It's contents are not inflated this way, thus it has no views in it. Therefore, your later call to
(TextView) view.findViewById(R.id.welcomeFragmentHeader);
also returns null. Therefore you are callingsetText()
on a null object in the next line, and getting an NPE.You need to properly inflate add your fragment to your activity as outline in here, or change your app logic.