Datenaustausch zwischen Fragmenten und Activity in einem TabLayout & Viewpager2

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datenaustausch zwischen Fragmenten und Activity in einem TabLayout & Viewpager2

    Liebe Community,

    ich versuche seid längerem geeignete Tutorials oder ähnliches zu finden, leider ohne Erfolg.

    Mein Problem: Ich habe eine App geschrieben, diese hat eine MainActivity und drei Fragmente. Diese werden mit dem ViewPager2 und eine TabLayout unter Verwendung des TabLayoutMediator's angezeigt. Nun will ich diesen Fragmenten Daten von der MainActivity mit geben und später auch die eingegebenen Daten in den Fragmenten auslesen um diese in einer Speichern-Funktion der MainActivity in der Datenbank zu speichern.

    MainActivity ( Call_Tabs_Add_Acitivity.java )

    Java-Quellcode: MainActivitiy ( Call_Tabs_Add_Acitivity.java )

    1. public class Call_Tabs_Add_Activity extends AppCompatActivity {
    2. private TabLayout call_tabLayout;
    3. private TabLayoutMediator call_tabMediator;
    4. private TabItem call_tabCallOverview, call_tabUnitOverview, call_tabVehicleOverview;
    5. private ViewPager2 call_viewPager;
    6. private PageAdapterAdd pageAdapterAdd;
    7. public static final int TAB_UEBERSICHT = 0, TAB_EINHEITEN = 1, TAB_FAHRZEUGE = 2;
    8. @Override
    9. protected void onCreate(Bundle savedInstanceState) {
    10. super.onCreate(savedInstanceState);
    11. setContentView(R.layout.activity_call_tabs);
    12. getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close);
    13. setTitle("");
    14. call_tabCallOverview = findViewById(R.id.call_tabCallOverview);
    15. call_tabUnitOverview = findViewById(R.id.call_tabUnitOverview);
    16. call_tabVehicleOverview = findViewById(R.id.call_tabVehicleOverview);
    17. call_viewPager = findViewById(R.id.call_viewPager);
    18. pageAdapterAdd = new PageAdapterAdd(this);
    19. call_viewPager.setAdapter(pageAdapterAdd);
    20. call_tabLayout = findViewById(R.id.call_tabLayout);
    21. call_tabMediator = new TabLayoutMediator(call_tabLayout, call_viewPager, new TabLayoutMediator.TabConfigurationStrategy() {
    22. @Override
    23. public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
    24. switch (position){
    25. case TAB_UEBERSICHT: {
    26. tab.setText(R.string.call_tabCallOverview);
    27. tab.setIcon(R.drawable.ic_tabcalloverview);
    28. break;
    29. }
    30. case TAB_EINHEITEN: {
    31. break;
    32. }
    33. case TAB_FAHRZEUGE: {
    34. break;
    35. }
    36. }
    37. }
    38. });
    39. call_tabMediator.attach();
    40. call_viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
    41. @Override
    42. public void onPageSelected(int position) {
    43. super.onPageSelected(position);
    44. BadgeDrawable badgeDrawable = call_tabLayout.getTabAt(position).getOrCreateBadge();
    45. switch (position){
    46. case TAB_UEBERSICHT: {
    47. break;
    48. }
    49. case TAB_EINHEITEN: {
    50. badgeDrawable.setNumber(88);
    51. break;
    52. }
    53. case TAB_FAHRZEUGE: {
    54. badgeDrawable.setNumber(69);
    55. break;
    56. }
    57. }
    58. }
    59. });
    60. }
    Alles anzeigen



    Fragment1 ( Call_Fragment_Overview.java )

    Java-Quellcode: Fragment1 ( Call_Fragment_Overview.java )

    1. public class Call_Fragment_Overview extends Fragment implements View.OnClickListener{
    2. private EditText addDateStart, addTimeStart, addDateEnd, addTimeEnd, addCallPlace, addCallChief, addCallSaftyEquipment;
    3. private Switch switchAgt, switchDekon;
    4. private View view;
    5. public Call_Fragment_Overview() {
    6. // Required empty public constructor
    7. }
    8. @Override
    9. public void onCreate(Bundle savedInstanceState) {
    10. super.onCreate(savedInstanceState);
    11. }
    12. @Override
    13. public View onCreateView(LayoutInflater inflater, ViewGroup container,
    14. Bundle savedInstanceState) {
    15. view = inflater.inflate(R.layout.call_fragment_overview_add, container, false);
    16. addDateStart = view.findViewById(R.id.add_date_start);
    17. addDateStart.setOnClickListener(this);
    18. addTimeStart = view.findViewById(R.id.add_time_start);
    19. addTimeStart.setOnClickListener(this);
    20. return view;
    21. }
    Alles anzeigen

    PageAdapter ( PageAdapterAdd.java )

    Quellcode: PageAdapter ( PageAdapterAdd.java )

    1. public class PageAdapterAdd extends FragmentStateAdapter {
    2. public PageAdapterAdd(@NonNull FragmentActivity fragmentActivity) {
    3. super(fragmentActivity);
    4. }
    5. @NonNull
    6. @Override
    7. public Fragment createFragment(int position) {
    8. switch (position){
    9. case 0:
    10. Fragment call_Fragment_Overview = new Call_Fragment_Overview();
    11. return call_Fragment_Overview;
    12. case 1:
    13. return ;
    14. case 2:
    15. return ;
    16. default:
    17. return null;
    18. }
    19. }
    20. @Override
    21. public int getItemCount() {
    22. return 3;
    23. }
    24. }
    Alles anzeigen
    Hier also meine Klassen. Nun wie bereits erwähnt sollen die Felder im Fragment1 gesetzt werden, durch die in der Datenbank enthaltenen Werte. Problem 1 also, das Übergeben dieser Daten von der MainActivity and das Fragment. Sollten die Daten leer sein, so kann man die Felder im Fragment selber ausfüllen. Diese sollen dann ausgelesen werden, wenn auf speichern geklickt wird. Problem 2 also, wie lese ich diese Daten aus und bekomme sie an die MainActivity übergeben. Ich hatte dies bereits mit Bundles probiert, jedoch nicht umgesetzt bekommen. Wäre also Cool wenn mir dabei jemand helfen könnte. Gerne auch gemeinsam im Discord. Problem 3 wäre dann noch, dass Fragment2 (hier nicht aufgeführt) eine Art "Filter-Auswahl" für das Fragment3 ist. Sprich wird im Fragment2 zum Beispiel die Kategorie "Pizza" ausgewählt, so soll in Fragment3 nur die "Pizzen" auswählbar sein. Hier ist also das Problem 3, wie bekomme ich es hin, dass Fragment3 weiß, was in Fragment2 ausgewählt wurde.

    Solltest du bis hier hin gekommen sein, schon mal vielen Dank fürs Durchlesen und deine Zeit! :thumbsup:

    P.s. sollte etwas an Infos fehlen, gerne drauf Aufmerksam machen!