如何使用底部导航将数据从活动发送到片段

时间:2021-04-23 20:43:35

标签: android fragment bottomnavigationview

大家好,请帮我

我想将数据从活动发送到片段,但我使用底部导航

我使用 Intent 将数据从活动 1 发送到活动 2(活动 2 具有底部导航)

我想将数据发送到 Home_Fragment 我应该使用什么?

  BottomNavigationView bottomNav =   findViewById(R.id.top_navigation);
    bottomNav.setOnNavigationItemSelectedListener(navListener);
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
            new Home_Fragment()).commit();
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
        new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

                Fragment selectedItem = null;
                switch (menuItem.getItemId()){

                    case R.id.navigation_home:
                        selectedItem = new Home_Fragment();
                        break;

                    case R.id.navigation_project:
                        selectedItem = new Project_Fragment();
                        break;

                    case R.id.navigation_persons:
                        selectedItem = new Persons_Fragment();
                        break;

                    case R.id.navigation_accounts:
                        selectedItem = new Accounts_Fragment();
                        break;

                    case R.id.navigation_other:
                        selectedItem = new Others_Fragment();
                        break;
                }
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        selectedItem).commit();
                return true;

            }
        };

2 个答案:

答案 0 :(得分:1)

只需从自身初始化您的片段并在 initialize 方法中传递任何数据。

例如,如果我们想将 String 值传递给 Fragmen,我们应该在 fragment 内使其像这样:

public static YourFrament getInstance(String example) {
        YourFrament fragment = new YourFrament();
        Bundle bundle = new Bundle();
        bundle.putString("key", example);
        fragment.setArguments(bundle);
        return fragment;
    }

要获取数据,您应该像这样从片段内的 onCreate 方法接收数据:

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null)
            String value = getArguments().getString("key");
    }

所以从活动中我们应该像这样调用片段:

case R.id.navigation_accounts:
             selectedItem = YourFrament.getInstance("string example");
          break;

答案 1 :(得分:0)

假设您想在初始化 fragment 时传递数据,您可以尝试创建一个 Bundle 对象,将您的数据添加到包中。

然后使用传递给您的包的静态 newInstance(Bundle args) 初始化您的片段。

所以基本上你的片段看起来像这样。

public class HomeFragment extends Fragment{

public static Fragment newInstance(Bundle args){ 
// get your data and do whatever
return new HomeFragment(); }

然后在您的 onNavigationItemSelected() 方法中

 case R.id.navigation_home:

 Bundle bundle = new Bundle();
 bundle.putInt(AGE, 22); // put whatever data you want to pass to the fragment.

 selectedItem = HomeFragment.newInstance(bundle)
 break;
相关问题