android 如何通过菜单将数据从Activity发送到Fragment?

mwg9r5ms  于 2022-11-20  发布在  Android
关注(0)|答案(1)|浏览(146)

因此,在我的android应用程序中,我使用菜单和片段,在用户登录后,我希望能够将用户名例如从登录活动传递到我的所有其他片段,我尝试了一些解决方案,但似乎没有一个工作,以下是我迄今为止所做的:
在我的LoginActivity中,我可以像这样传递用户名:

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

在我的MenuActivity中,我这样做是为了从LoginActivity获取数据:

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

而这个把数据传递给我的不同片段:

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

最后,在我的HomeFragment中:

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

但它似乎不起作用,我可以将数据从Activity传递到另一个Activity或另一个片段,但在使用菜单时它不想工作,每当我想在任何片段中使用“username”时,我总是得到NullPointerException,因为它是空的。有人知道我在这里做错了什么吗?

yiytaume

yiytaume1#

为了在活动之间传递值,您可以使用Intents来传递数据,而不是bundle

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

将值从活动传递到片段

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

然后在片段**onCreateView()**类中

Bundle bundle = this.getArguments();
String username= bundle.getString("username");

相关问题