java如何在新的导航抽屉体系结构组件中实现共享应用或评级应用或注销功能
我遵循official docs的导航架构组件指南
我可以将服务、我的帐户菜单链接到它们的目的地片段,但问题在于费率/共享/注销,我们不需要任何特殊片段/目的地,对吗?。作为导航用户界面。设置导航控制器(导航视图、导航控制器);这一行做了所有抽屉项目点击事件本身,我不能做太多
尽管如此,我还是尝试了这种方法,但它不起作用
import 安卓.os.Bundle;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.widget.TextView;
import 安卓x.annotation.NonNull;
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓x.appcompat.widget.Toolbar;
import 安卓x.drawerlayout.widget.DrawerLayout;
import 安卓x.navigation.NavController;
import 安卓x.navigation.Navigation;
import 安卓x.navigation.ui.AppBarConfiguration;
import 安卓x.navigation.ui.NavigationUI;
import com.google.安卓.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.startup.housebuddy.R;
import com.startup.housebuddy.Utility.Utility;
public class ServiceListActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private AppBarConfiguration mAppBarConfiguration;
private TextView headerSubTitleTv;
private TextView headerTitleTv;
private NavController navController;
private NavigationView navigationView;
private DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_service_list);
Toolbar toolbar = findViewById(R.id.toolbar);
navigationView = findViewById(R.id.nav_view);
View headerView = navigationView.inflateHeaderView(R.layout.nav_header_service_list);
// headerTitleTv = headerView.findViewById(R.id.header_title_tv);
headerSubTitleTv = headerView.findViewById(R.id.header_subtitle);
populateUpNavHeader();
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
/* mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
R.id.nav_tools, R.id.nav_share, R.id.nav_send)
.setDrawerLayout(drawer)
.build();*/
/*TODO : Add other ids of fragments required to show in navigation drawer*/
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home,R.id.nav_myAccount,R.id.nav_about)
.setDrawerLayout(drawer)
.build();
navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
//NavigationUI.setupWithNavController(navigationView, navController);
navigationView.bringToFront();
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.service_list, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
{
switch (menuItem.getItemId()) {
case R.id.nav_home:
Utility.showToast("nav home", this);
navController.navigate(R.id.nav_home);
break;
case R.id.nav_myAccount:
Utility.showToast("nav accout", this);
navController.navigate(R.id.nav_myAccount);
break;
case R.id.nav_share:
// do share intent
Utility.showToast("Share", this);
drawer.closeDrawers(); // close nav bar
break;
}
drawer.closeDrawers(); // close nav bar
return true;
}
}
所以我的问题是,我如何实现这些类型的功能,对于这些功能,导航抽屉中不需要明确的目的地
# 1 楼答案
据我所知,不可能以一种可爱的方式处理它。和往常一样,它并非在所有情况下都有效。正如你可能尝试的那样,使用这两种方法是毫无意义的
我提议:
# 2 楼答案
你的问题不太清楚。但是,如果不需要片段来打开,只需在if-else条件中写入所需的逻辑即可。然后关闭导航栏