【问题标题】:how to send data from activity to fragment with bottom navigation如何使用底部导航将数据从活动发送到片段
【发布时间】:2021-04-23 20:43:35
【问题描述】:

大家好,请帮帮我

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

我使用 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;

            }
        };

【问题讨论】:

标签: android fragment bottomnavigationview


【解决方案1】:

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

例如,如果我们想将一个字符串值传递给片段,我们应该在片段中像这样:

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;

【讨论】:

  • 我将第一个片段作为界面,这样当从第一个活动移动到第二个活动时,第一个片段会自动出现,因此直到我按下底部导航中的按钮后才会传输数据,并且我希望数据从第一个活动移到片段
  • getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Home_Fragment()).commit()
  • 您应该只像上面的代码一样传递选定的项目,而不是像这样从主片段打开新实例:getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, selectedItem) .commit();
【解决方案2】:

假设您想在初始化 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;

【讨论】:

  • 方法 new Instance 之间,我应该如何获取数据?
猜你喜欢
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
相关资源
最近更新 更多