Android:更改导航抽屉应用程序中的当前内容,而不在抽屉菜单中显示项目
Posted
技术标签:
【中文标题】Android:更改导航抽屉应用程序中的当前内容,而不在抽屉菜单中显示项目【英文标题】:Android: change current content in navigation drawer app, without showing item in drawer menu 【发布时间】:2020-11-26 18:33:07 【问题描述】:我是 android 开发的初学者,我想创建一个带有导航抽屉的应用。我从 Android Studio“创建项目”窗口中的默认模板开始。
这是 MainActivity 中的代码,用于设置抽屉导航。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// 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_customers, R.id.nav_notes, R.id.nav_stats, R.id.nav_settings)
.setDrawerLayout(drawer)
.build();
navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
我有一个片段,即“客户”页面。此页面包含一个用户可以单击以创建新客户的按钮。单击该按钮时,应打开一个新页面,该页面接受用于创建客户的输入。 这个新页面不应该是用户可以直接导航到的导航项。打开该页面的唯一方法和理由应该是使用我提到的客户视图中的“创建客户”按钮。
因此,该新页面不应包含在导航抽屉的菜单中。同时,我确实想给这个页面一个自己的工具栏。
要做的最重要的两件事似乎是:
向活动添加导航目的地/页面。此页面不应包含在导航抽屉的菜单中。应以编程方式打开页面。 页面必须在屏幕顶部有自己的工具栏。看起来很简单,我尝试了很多,但到目前为止我没有找到任何解决方案。
【问题讨论】:
在图形文件中添加目的地并在片段布局中放置工具栏 @GabrieleMariotti 你能告诉我更多细节吗?我(还)不明白如何实际导航到我添加到图表中的页面。 【参考方案1】:您可以查看doc:
在你的图表中定义如下:
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
android:label="a"
tools:layout="@layout/a">
<action android:id="@+id/action_a_to_b"
app:destination="@id/b"/>
</fragment>
<fragment android:id="@+id/b"
android:name="com.example.myapplication.FragmentB"
android:label="b"
tools:layout="@layout/b">
</fragment>
然后只是使用导航:
findNavController().navigate(R.id.action_a_to_b)
还要检查这个page:
当应用栏的布局对于您应用中的每个目的地都相似时,将顶部应用栏添加到您的 Activity 效果很好。但是,如果您的顶部应用栏在各个目的地之间发生显着变化,请考虑从您的活动中移除顶部应用栏并在每个目的地片段中定义它。
在onCreateView
中的FragmentB
中,您可以扩展您的布局
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View?
val root = inflater.inflate(R.layout.fragment_B container, false)
在这个布局中你可以放一个Toolbar
:
<LinearLayout>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
... />
...
</LinearLayout>
和:
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
val navController = findNavController()
val appBarConfiguration = AppBarConfiguration(navController.graph)
view.findViewById<Toolbar>(R.id.toolbar)
.setupWithNavController(navController, appBarConfiguration)
另一种方法是在 Activity 中设置导航并使用 OnDestinationChangedListener
:
navController.addOnDestinationChangedListener _, destination, _ ->
if(destination.id == R.id.b)
toolbar.visibility = View.GONE
//....
else
toolbar.visibility = View.VISIBLE
//.....
【讨论】:
以上是关于Android:更改导航抽屉应用程序中的当前内容,而不在抽屉菜单中显示项目的主要内容,如果未能解决你的问题,请参考以下文章