0

Ich frage mich, ob es möglich ist, ein extra mit Absicht zu mehreren Klassen zu senden, und verwenden Sie eine switch-Anweisung, um zu sehen, welche extra gesendet wurde, und je nachdem, was extra, ändern Sie die Recycler View-Daten .Intent getExtra switch case, mehrere Klassen

Zum Beispiel hat meine App eine erweiterbare Listenansicht mit 12 Optionen. Jede Option sendet sie an eine neue Klasse mit Tablayout- und Recycler-Ansicht. Mit dem Tablayout habe ich 3 Fragmente für jede Registerkarte, wo die Daten für jede Recycler-Ansicht aktuell gesetzt sind. Das funktioniert gut, aber ich frage mich, wie ich es machen kann, ohne eine Menge Klassen für die 12 verschiedenen Optionen zu machen.

Hier ist mein erweiterbarer Listenansichtscode. In der ersten Kinderposition können Sie sehen, worüber ich mit dem putExtra spreche.

expandableListView.setAdapter(mAdapter); 

    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("value", "w29w1"); 
        startActivity(intent); 
       } 
       if (childPosition == 1) { 
        Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class); 
        startActivity(intent); 
       } 
       if (childPosition == 2) { 
        Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class); 
        startActivity(intent); 
       } 
       if (childPosition == 3) { 
        Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class); 
        startActivity(intent); 
       } else return false; } 

Hier ist mein WorkoutDaysActivity, wo es die Absicht, den Benutzer auf Klicken der erweiterbaren Liste Ansicht sendet:

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)); 

} 

//ADD ALL PAGES 
private void addPages(ViewPager pager) { 
    MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager()); 
    adapter.addPage(new MondayFragment()); 
    adapter.addPage(new WedFragment()); 
    adapter.addPage(new FridayFragment()); 

    //SET ADAPTER to pager 
    pager.setAdapter(adapter); 
} 

private TabLayout.OnTabSelectedListener listener(final ViewPager pager) { 
    return new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      pager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }; 
} 
} 

Und hier ist eine meiner Registerkarte Fragmente. Die anderen beiden sind im Grunde das gleiche:

public class WedFragment extends Fragment { 

@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<>(); 


    //SINGLE EXERCISE 
    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); 

    return workout; 

} 

@Override 
public String toString() { 
    return "Wednesday"; 
} 
} 

Diese 3-Fragment Klassen theoretisch sind, wo ich möchte ein Schaltergehäuse setzen, um zu sehen, welche Artikel auf erweiterbare Liste Ansicht geklickt wurde, und die Daten in den drei Registerkarten bevöl abhängig davon, was geklickt wurde.

Danke für die Hilfe!

Antwort

0

Sie können Daten speichern, die innerhalb einer Absicht in einer Liste oder Hashmaps senden.

ArrayList<String> list = new ArrayList<String>(); 
    list.add("w29w1"); 
    list.add("w29w2"); 
    .... 

In onChildClick:

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

oder HashMap:

HashMap<Integer, String> map = new HashMap<Integer, String>(); 
map.put(0, "w29w1"); 
map.put(1, "w29w2"); 
... 

Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class); 
intent.putExtra("value", map.get(childPosition)); 
startActivity(intent); 

EDIT: Um diesen Wert in WorkoutDaysActivity.class verwenden

Intent intent = getIntent(); 
String value = intent.getStringExtra("value"); 

Senden von Daten an Fragmente:

private void addPages(ViewPager pager) { 
    MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager()); 
    MondayFragment mondayFragment = new MondayFragment(); 
    mondayFragment.setArguments(value); 
    adapter.addPage(mondayFragment); 
    ... 

    pager.setAdapter(adapter); 
} 
+0

Wie würde ich es allerdings, dass die Daten zu verwenden, in der einzelnen Registerkarten Fragmente Klasse? – LBJ33

+0

Haben Sie das Problem gelöst? – faranjit

+0

Nein, noch nicht, weil ich den Wert in der tatsächlichen Fragmentklasse benötige, da dort der Wert von recyclerview gesetzt ist. Nicht die Trainingstage – LBJ33