大家好,请帮我
我想将数据从活动发送到片段,但我使用底部导航
我使用 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;
}
};
答案 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;