Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅在第一个片段上隐藏浮动操作按钮?_Java_Android_Android Studio - Fatal编程技术网

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

Java 如何仅在第一个片段上隐藏浮动操作按钮?,java,android,android-studio,Java,Android,Android Studio,请告诉我如何在Android Studio中仅在第一个片段上隐藏浮动操作按钮? 我使用导航抽屉,这里是MainActivity.java中的一段代码,我在其中调用片段: public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { FirstFragment fragment1; SecondFragment

请告诉我如何在Android Studio中仅在第一个片段上隐藏浮动操作按钮? 我使用导航抽屉,这里是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;
    }

这是我主要活动的代码。当我添加fab.setVisibility(View.GONE)时;Android Studio向我显示一个错误“无法解析符号fab”。当我在这个块中添加FloatingActionButton fab=findViewById(R.id.fab);fab不会显示在所有片段中。

您可以将
fab
设置为类级别变量,而不是本地变量,然后根据需要更改可见性,例如:

    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;
    }

我想你可以在
fab.setVisibility(View.GONE)
内设置
default
case,即片段1,对于其他情况,你可以设置
fab.setVisibility(View.VISIBLE)
试试看,让我知道它是否有效。@MayurGajra感谢你的回答,但当我添加fab.setVisibility(View.GONE)时;Android Studio向我显示一个错误“无法解析符号fab”。当我在这个块中添加FloatingActionButton fab=findViewById(R.id.fab);该晶圆厂并非在所有片段中都显示。您能否发布代码,说明您如何标记晶圆厂以及在何处声明晶圆厂?我需要布局和活动代码来了解如何实现这一点。@MayurGajra我在初始问题OK中添加了代码。让我喝一杯look@luska如果对您有效,您可以将此答案标记为已接受。