0

So in my android app I am using a menu and fragments, and after the user logs in I want to be able to pass the username for example from the login activity to all my other fragments, I tried few solutions but none of them seemed to work, here's what I've done so far:

In my LoginActivity I am able to pass the username like this:

final Bundle bundle = new Bundle();
    bundle.putString("username", username.getText().toString());

And in my MenuActivity this is what I've done to get data from the LoginActivity:

Intent intent = getIntent();
    if (intent != null) {
        if (intent.hasExtra("username")) {
            username = intent.getStringExtra("username");
        }
    }

And this to pass the data to my different fragments:

final Bundle bundle = new Bundle();
    bundle.putString("username", username);

bottomNavigationView.setOnItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment fragment = null;

            switch (item.getItemId()) {
                case R.id.home:
                    fragment = new HomeFragment();
                    fragment.setArguments(bundle);
                    break;
                case R.id.todo:
                    fragment = new ToDoFragment();
                    fragment.setArguments(bundle);
                    break;
                case R.id.schedule:
                    fragment = new ScheduleFragment();
                    fragment.setArguments(bundle);
                    break;
                case R.id.courses:
                    fragment = new CoursesFragment();
                    fragment.setArguments(bundle);
                    break;
                case R.id.profile:
                    fragment = new ProfileFragment();
                    fragment.setArguments(bundle);
                    break;
            }
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, "usernameTag").commit();
            return true;
        }
    });

And finally in my HomeFragment:

if(getArguments() != null) {
        username = getArguments().getString("username");
    }

But it doesn't seem to work, I am able to pass data from activity to another activity or another fragment but while using a menu it didn't wanna work, I keep getting NullPointerException whenever I wanna use "username" in any fragment because it's empty. Does anyone know what I'm doing wrong here?

Llexii
  • 7
  • 1
  • 5
  • Set breakpoint in `Fragment` and look at what you get when you call `getArguments()`. – David Wasser Nov 18 '22 at 10:20
  • I think `Sharedpreference` is the best option to do this type of work. Use `Sharedpreference`. see here https://stackoverflow.com/a/3624358/16765223 – M DEV Nov 18 '22 at 12:33

1 Answers1

0

In order to pass values from activity to activity you can use Intents to pass data instead of bundles

intent.putExtra("username","value");

to pass value from activity to Fragment

final Bundle bundle = new Bundle();
bundle.putString("username", username);
bottomNavigationView.setOnItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment fragment = null;

        switch (item.getItemId()) {
                  ...
          }


fragment.setArguments(bundle);           

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, "usernameTag").commit();
        return true;
    }
});

then in your Fragment onCreateView() class

Bundle bundle = this.getArguments();
String username= bundle.getString("username");
codeX
  • 11
  • 2