-1

I have a fragment where I want to display values from a List, so I get it like this in Activity Recipe Detail

        IngredientsFragment ingredientsFrag = new IngredientsFragment();
    ingredientsFrag.setPosition(position);
    ingredientsFrag.setRecipes(MainActivity.receipes);
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.FRGingredients, ingredientsFrag)
            .commit();

The main thing up there to take note of is the SetRecipes() Method, I am passing in a List, it is a static List in the MainActivity class.

In the Ingredients fragment I have this in Ingredient Fragment:

public class IngredientsFragment extends Fragment {
int position;
 List<Recipe> mRecipes;
String test;


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.frag_recipe_ingredients, container, false);
    TextView ingredients = rootView.findViewById(R.id.ingredientsTxt);

    ingredients.setText(String.valueOf(mRecipes.get(0).getName()));
    return rootView;
}

public void setPosition(int position) {
    this.position = position;
}

public void setRecipes(List<Recipe> recipes) {
    test = String.valueOf(recipes.get(0).getName());
    mRecipes = recipes;
}
}

When I run this code this is what I get:

11-10 23:14:17.682 2812-2812/com.lemuel.lemubit.bakenow E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.lemuel.lemubit.bakenow, PID: 2812
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lemuel.lemubit.bakenow/com.lemuel.lemubit.bakenow.RecipeDetail}: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class fragment
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2583)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1499)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5765)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
        Caused by: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class fragment
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
        at com.lemuel.lemubit.bakenow.RecipeDetail.onCreate(RecipeDetail.java:15)
        at android.app.Activity.performCreate(Activity.java:6360)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2530)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1499)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5765)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
        Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class fragment
                                                                          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
        at com.lemuel.lemubit.bakenow.RecipeDetail.onCreate(RecipeDetail.java:15)
        at android.app.Activity.performCreate(Activity.java:6360)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2530)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1499)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5765)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
        Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
        at com.lemuel.lemubit.bakenow.Fragments.IngredientsFragment.onCreateView(IngredientsFragment.java:34)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2239)
        at android.support.v4.app.FragmentManagerImpl.ensureInflatedFragmentView(FragmentManager.java:1507)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1303)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1502)
        at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1737)
        at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3512)
        at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)
        at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:330)
        at android.support.v4.app.BaseFragmentActivityApi14.onCreateView(BaseFragmentActivityApi14.java:39)
        at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
        at com.lemuel.lemubit.bakenow.RecipeDetail.onCreate(RecipeDetail.java:15)
        at android.app.Activity.performCreate(Activity.java:6360)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2530)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1499)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5765)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

So it does not recognize the variable mRecipes, but what puzzles me is that when I use the variable test it woks, which means that the list actually is passed down in the method, but anytime I try accessing it in onCreateView, it tell me that null error. Though I can access test if I change it to

ingredients.setText(test);

It works when I do it like that, which means OnCreateView is seeing variable test it also means that the List passed into the method initially was not null.

Nongthonbam Tonthoi
  • 12,667
  • 7
  • 37
  • 64
Lemuel Ogbunude
  • 184
  • 3
  • 16

2 Answers2

1

That's not how you pass an array or any other variable for that matter to a fragment from an activity. You have to pass a bundle holding your array to your fragment with:

Bundle bundle = new Bundle();
bundle.putStringArrayList("edttext", arraylist);
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

IngredientsFragment ingredientsFrag = new IngredientsFragment();
ingredientsFrag.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
            .replace(R.id.FRGingredients, ingredientsFrag)
            .commit();

Make sure your POJO Recipe implements Parcelable.

HaroldSer
  • 2,025
  • 2
  • 12
  • 23
0

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference at com.lemuel.lemubit.bakenow.Fragments.IngredientsFragment.onCreateView(IngredientsFragment.java:34)

the exception is clear NullPointerException while accessing the list. you have to put your list into Bundle and set it as arguments to your fragment .. then in the fragment class you can get this bundle from your fragment in the onCreateView method.

Ahmed Garhy
  • 475
  • 3
  • 11