0

Ich habe Probleme beim Senden der Absicht zu fragmentieren. Ich versuche, Absicht von einer Klasse an eine andere zu senden, und setze dann Argument für das Fragment. Im Fragment möchte ich dann eine switch-Anweisung, um die Daten basierend auf dem Argumentwert auf die Recycler-Ansicht zu setzen. HierAbsicht zu fragment funktioniert nicht

ist die erste Aktivität (Ich habe nur 2 Kind Positionen gezeigt, wo ich die Absicht festgelegt, in Wirklichkeit gibt viele mehr sind):

expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
      if (groupPosition == 0) { 
       if (childPosition == 0) { 
        Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class); 
        intent.putExtra("workout", "w29w1"); 
        startActivity(intent); 
       } 
       if (childPosition == 1) { 
        Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class); 
        intent.putExtra("workout", "w29w1"); 
        startActivity(intent); 
       } 

Hier ist, wo die Fragmente erzeugt werden, und wo ich versuchen, die Argumente zu setzen:

public class WorkoutDaysActivity extends BaseActivity{ 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.workout_days); 
    mToolBar = activateToolbar(); 
    setUpNavigationDrawer(); 


    ViewPager vp = (ViewPager) findViewById(R.id.view_pager); 
    this.addPages(vp); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
//  tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabLayout.setupWithViewPager(vp); 
    tabLayout.setOnTabSelectedListener(listener(vp)); 

} 
private void addPages(ViewPager pager) { 
    MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager()); 
    Intent intent = getIntent(); 
    String workout = intent.getStringExtra("workout"); 
    Bundle args = new Bundle(); 
    args.putString("workout", workout); 

    MondayFragment mondayFragment = new MondayFragment(); 
    mondayFragment.setArguments(args); 
    adapter.addPage(mondayFragment); 
    WedFragment wedFragment = new WedFragment(); 
    wedFragment.setArguments(args); 
    adapter.addPage(wedFragment); 
    FridayFragment fridayFragment = new FridayFragment(); 
    fridayFragment.setArguments(args); 
    adapter.addPage(fridayFragment); 

Und schließlich hier ist eines der drei Fragment Klassen, in denen ich versuche, eine switch-Anweisung zu verwenden, um Werte zu setzen:

public class WedFragment extends Fragment { 

Bundle args = getArguments(); 
String workout3 = args.getString("workout"); 

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

//  //RECYCLERVIEW 
    RecyclerView rv = (RecyclerView) view.findViewById(R.id.mRecyclerWed); 
    rv.setLayoutManager(new LinearLayoutManager(this.getActivity())); 
    rv.setAdapter(new MyRecyclerAdapter(this.getActivity(), getWedWorkout())); 

    return view; 


} 

private ArrayList<Workout> getWedWorkout() { 
    //COLLECTION OF MONDAY WORKOUT 

    ArrayList<Workout> workout = new ArrayList<>(); 
    switch(workout3) { 
     case "w29w1" : { 
      Workout workouts = new Workout("Bench", "60", "6", "155", false); 

      //ADD TO COLLECTION 
      workout.add(workouts); 

      workouts = new Workout("Bench", "70", "5", "175", false); 
      workout.add(workouts); 

      break;} 
     case "w29w2" :{ 
      Workout workouts = new Workout("Squat", "60", "6", "155", false); 

      //ADD TO COLLECTION 
      workout.add(workouts); 

      workouts = new Workout("Squat", "70", "5", "175", false); 
      workout.add(workouts); 

     break;} 
    } return workout; 

Und hier ist der Fehler, der die App abstürzt:

08-03 13:53:11.917 32143-32143/com.bestworkouts.sheikoworkout E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.bestworkouts.sheikoworkout, PID: 32143 
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bestworkouts.sheikoworkout/com.bestworkouts.sheikoworkout.WorkoutDaysActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
                       at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7229) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference 
                       at com.bestworkouts.sheikoworkout.Fragments.WedFragment.<init>(WedFragment.java:24) 
                       at com.bestworkouts.sheikoworkout.WorkoutDaysActivity.addPages(WorkoutDaysActivity.java:47) 
                       at com.bestworkouts.sheikoworkout.WorkoutDaysActivity.onCreate(WorkoutDaysActivity.java:27) 
                       at android.app.Activity.performCreate(Activity.java:6876) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)  
                       at android.app.ActivityThread.access$1100(ActivityThread.java:222)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:158)  
                       at android.app.ActivityThread.main(ActivityThread.java:7229)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  

Wo WedFragment.java:24 ist diese Zeile:

String workout3 = args.getString("workout"); 

WorkoutDaysActivity.java:47 ist diese Zeile:

WedFragment wedFragment = new WedFragment(); 

und WorkoutDaysActivity.java:27 ist diese Zeile:

tabLayout.setupWithViewPager(vp); 
+0

Ist Ihre Aktivität eines weiteren Eintrag Punkt? Ich meine, eine andere Absicht, wo du das "Workout" nicht extra einstellst. Bisher konnte kein Fehler gefunden werden. Überprüfen Sie, wo diese Zeichenfolge fehlt. –

+0

Die Antwort unten funktioniert! Musste einen Teil des Codes in der Fragment-Klasse umschalten! – LBJ33

Antwort

1

Setzen Sie diese beide Linie in Ihrer onCreate Funktion:

public class WedFragment extends Fragment { 

Bundle args; 
String workout3=""; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    args = getArguments(); 
    workout3 = args.getString("workout"); 
    View view = inflater.inflate(R.layout.wed_fragment, null); 

    //RECYCLERVIEW 
    RecyclerView rv = (RecyclerView) view.findViewById(R.id.mRecyclerWed); 
    rv.setLayoutManager(new LinearLayoutManager(this.getActivity())); 
    rv.setAdapter(new MyRecyclerAdapter(this.getActivity(), getWedWorkout())); 

    return view; 
} 
+0

Das hat funktioniert !! Danke vielmals! – LBJ33