Java 如何仅在第一个片段上隐藏浮动操作按钮?
请告诉我如何在Android Studio中仅在第一个片段上隐藏浮动操作按钮? 我使用导航抽屉,这里是MainActivity.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
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如果对您有效,您可以将此答案标记为已接受。