如何解决如何使用底部导航将数据从活动发送到片段
大家好,请帮我
我想将数据从活动发送到片段,但我使用底部导航
我使用 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;
}
};
解决方法
只需从自身初始化您的片段并在 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;
,
假设您想在初始化 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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。