当前位置: 首页 > 知识库问答 >
问题:

从一个片段传递到另一个片段

廉鸿运
2023-03-14
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();// this line has the problem

这是我完整的logcat:

FATAL EXCEPTION: main                                                                               java.lang.NullPointerException                                        

在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:441)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:441)在Android.support.v4.app.backStackRecord.replace(id.support.v7.view.menu.menuBuilder.dispatchMenuItemSelect(MenuBuilder.java:811)在Android.support.v7.view.menu.menuItemimpl.invoke(MenuItemimpl.java:152)在Android.support.v7.view.menu.menuBuilder.performItemAction(MenuBuilder.java:152)在Android.support.v7.view.menu.menuBuilder.navigationMenuPresenter HandleCallback(handler.java:725)在Android.os.handler.DispatchMessage(handler.java:92)在Android.os.looper.loop(looper.java:176)在Android.app.activitythread.main(activitythread.java:5319)在java.lang.reflect.Method.invokenative(原生方法)在java.lang.reflect.Method.invoke(Method.java:511)在.System.NativeStart.Main(本机方法

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        txResult = (TextView) findViewById(R.id.txResult);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        nvDrawer = (NavigationView) findViewById (R.id.nvView);
        setupDrawerContent(nvDrawer);}



    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        selectDrawerItem(menuItem);
                        return true;
                    }
                });
    }

    public void selectDrawerItem(MenuItem menuItem) {
        // Create a new fragment and specify the planet to show based on
        // position
        Fragment fragment = null;

        Class fragmentClass;
        switch(menuItem.getItemId()) {
            case R.id.nav_first_fragment:
                fragmentClass = MainActivity.class;
                break;
            case R.id.nav_second_fragment:
                fragmentClass = SecondActivity.class;
                break;
            case R.id.nav_third_fragment:
                fragmentClass = ThirdActivity.class;
                break;
            default:
                fragmentClass = MainActivity.class;
        }

        try {
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Insert the fragment by replacing any existing fragment
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();

        // Highlight the selected item, update the title, and close the drawer
        menuItem.setChecked(true);
        setTitle(menuItem.getTitle());
        mDrawer.closeDrawers();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // The action bar home/up action should open or close the drawer.
        switch (item.getItemId()) {
            case android.R.id.home:
                mDrawer.openDrawer(GravityCompat.START);
                return true;
        }

        return super.onOptionsItemSelected(item);
    }

   // @Override
   // protected void onPostCreate(Bundle savedInstanceState) {
   //     super.onPostCreate(savedInstanceState);
   // 

secondactivity.java

 private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        selectDrawerItem(menuItem);
                        return true;
                    }
                });
    }

    public void selectDrawerItem(MenuItem menuItem) {
        // Create a new fragment and specify the planet to show based on
        // position
        Fragment fragment = null;

        Class fragmentClass;
        switch(menuItem.getItemId()) {
            case R.id.nav_first_fragment:
                fragmentClass = MainActivity.class;
                break;
            case R.id.nav_second_fragment:
                fragmentClass = SecondActivity.class;
                break;
            case R.id.nav_third_fragment:
                fragmentClass = ThirdActivity.class;
                break;
            default:
                fragmentClass = SecondActivity.class;
        }

        try {
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Insert the fragment by replacing any existing fragment
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();

        // Highlight the selected item, update the title, and close the drawer
        menuItem.setChecked(true);
        setTitle(menuItem.getTitle());
        mDrawer.closeDrawers();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // The action bar home/up action should open or close the drawer.
        switch (item.getItemId()) {
            case android.R.id.home:
                mDrawer.openDrawer(GravityCompat.START);
                return true;
        }

        return super.onOptionsItemSelected(item);
    }

    // @Override
    // protected void onPostCreate(Bundle savedInstanceState) {
    //     super.onPostCreate(savedInstanceState);
    // }

共有1个答案

梁盛
2023-03-14

您的问题不清楚,因为您没有发布完整的类代码,以及您得到的是什么错误。

我所理解的是,当导航抽屉中的一个项目被选中时,您希望更改片段。类似于Gmail应用程序,当用户从收件箱文件夹移动到发送文件夹或任何其他文件夹时。

如果您正在尝试这样做,您需要创建一个活动,插入一个片段。当选择导航抽屉中的一个项目时,应根据导航抽屉中选择的选项将当前片段替换为新片段。

 类似资料:
  • 我在一个片段中有一个复选框列表(我们称之为FragmentA),我有一个包含两个片段(FragmentB和C)的活动。如果选中一个复选框,我想在片段C中显示一条消息,说明选中了特定的复选框。我需要帮助,因为我不知道如何将(isChecked)从片段A传递到片段C。 FragmentA.java 分数不影响碎片C。 包含片段 B 和 C 的活动 片段C 活动

  • 我找到了这段代码来将数据从一个片段传递到另一个片段: 片段1: 片段2: 但我不想改变片段。所以我拆了一部分。但这不起作用。这里是我的代码: 片段1: 片段2: 我必须使用我在网上找到的代码还是我的版本也能工作?当我打开第二个片段时会出现这个错误: E/AndroidRuntime:致命异常:主进程:com.example.rexan_snerficonquiz.fragment_score.on

  • 在FragmentOne.class扩展android.support.v4.app.

  • 我有两个活动,在活动1中有碎片,在活动2中有碎片 fragment1和fragment2扩展自FragmentActivity1,activity2扩展自AppCompatActivity 我想将字符串值从fragment1发送到fragment2,而不获取空值。我希望你能理解这个问题。谢谢

  • 我知道有很多关于这个的问题,但没有一个能解决我的问题我想把一个字符串变量从一个片段传递给另一个片段,这是我做的代码。但是我得到了错误(我会显示错误) 从我做的第一个片段 我喜欢的第二个片段 我犯了这样的错误

  • 编辑问题以包括所需的行为、特定的问题或错误,以及重现问题所需的最短代码。这将帮助其他人回答这个问题。 嗨,我知道这个问题有答案。我已经尝试了所有它们,但在我的应用程序中不起作用。我有两个片段(登录和密码),我想将电子邮件和手机号码从登录片段传递到密码片段。我尝试了很多,但我无法得到解决方案。 请任何人帮助我。 登录片段: 密码碎片: