简体   繁体   English

如何仅在第一个片段上隐藏浮动操作按钮?

[英]how to hide the float action button only on the 1st fragment?

Please tell me how to hide the Floating Action button only on the 1st fragment in Android Studio?请告诉我如何仅在 Android Studio 的第一个片段上隐藏浮动操作按钮? I use Navigation Drawer, here is a code in MainActivity.java where I call the fragments:我使用导航抽屉,这是 MainActivity.java 中的代码,我在其中调用片段:

    public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    FirstFragment fragment1;
    SecondFragment fragment2;
    ThirdFragment fragment3;
    


    @SuppressLint("StaticFieldLeak")
    public static Context currentContext;

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

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });



        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        navigationView.bringToFront();

        fragment1 = new FirstFragment();
        fragment2 = new SecondFragment();
        fragment3 = new ThirdFragment();
        
        getSupportFragmentManager().beginTransaction().add(R.id.nav_host_fragment, fragment1).commit();
        if (savedInstanceState==null){
           }

       
    }


    @Override
    public void onBackPressed() {
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
       
        int id = item.getItemId();
        return super.onOptionsItemSelected(item);
    }





@Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int id = item.getItemId();
        FragmentTransaction ftrans = getSupportFragmentManager().beginTransaction();
        String title = "App Name";

        switch (id) {
            case (R.id.nav_fr2):
                ftrans.replace(R.id.nav_host_fragment, fragment2);
                title="Fragment 2";
                break;

            case (R.id.nav_fr3):
                ftrans.replace(R.id.nav_host_fragment, fragment3);
                title="Fragment 3";
                break;

           
            default:
                ftrans.replace(R.id.nav_host_fragment, fragment1);
                break;
        }
        getSupportActionBar().setTitle(title);
        ftrans.commit();
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

Here is a code of my main activity.这是我的主要活动的代码。 when I add fab.setVisibility(View.GONE);当我添加 fab.setVisibility(View.GONE); Android Studio display me an error "Cannot resolve symbol fab". Android Studio 显示错误“无法解析符号工厂”。 When I add in this block FloatingActionButton fab = findViewById(R.id.fab);当我在这个块中添加 FloatingActionButton fab = findViewById(R.id.fab); the fab not displayed in all fragments.晶圆厂未显示在所有片段中。

You can make your fab a class level variable instead of local and then change the visibility to your needs following is the example:您可以使您的fab成为 class 级别变量而不是本地变量,然后根据您的需要更改可见性,示例如下:

    FirstFragment fragment1;
    SecondFragment fragment2;
    ThirdFragment fragment3;



    @SuppressLint("StaticFieldLeak")
    public static Context currentContext;

    // declare it here
    FloatingActionButton fab;


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

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        //assign here like this
        fab = findViewById(R.id.fab);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });



        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        navigationView.bringToFront();

        fragment1 = new FirstFragment();
        fragment2 = new SecondFragment();
        fragment3 = new ThirdFragment();

        getSupportFragmentManager().beginTransaction().add(R.id.nav_host_fragment, fragment1).commit();
        if (savedInstanceState==null){
        }


    }


    @Override
    public void onBackPressed() {
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        return super.onOptionsItemSelected(item);
    }





    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int id = item.getItemId();
        FragmentTransaction ftrans = getSupportFragmentManager().beginTransaction();
        String title = "App Name";

        switch (id) {
            case (R.id.nav_fr2):
                // set this visible when fragment 2 selected
                fab.setVisibility(View.VISIBLE);
                ftrans.replace(R.id.nav_host_fragment, fragment2);
                title="Fragment 2";
                break;

            case (R.id.nav_fr3):
                // set this visible when fragment 3 selected
                fab.setVisibility(View.VISIBLE);
                ftrans.replace(R.id.nav_host_fragment, fragment3);
                title="Fragment 3";
                break;


            default:
                // hide when fragment 1 selected
                fab.setVisibility(View.GONE);
                ftrans.replace(R.id.nav_host_fragment, fragment1);
                break;
        }
        getSupportActionBar().setTitle(title);
        ftrans.commit();
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM