相关疑难解决方法(0)

当使用BottomNavigationView和新的NavController时,有没有办法保持片段活着?

我正在尝试使用新的导航组件.我使用带有navController的BottomNavigationView:NavigationUI.setupWithNavController(bottomNavigation,navController)

但是当我切换片段时,即使它们以前被使用过,它们也会每次都被破坏/创建.

有没有办法让我们的主要片段链接到我们的BottomNavigationView?

navigation android bottomnavigationview

55
推荐指数
3
解决办法
1万
查看次数

返回到"导航架构组件"中的相同选项卡时,嵌套片段的状态将丢失

我正在探索上个月在Google I/O 2018中引入的"导航架构组件"概念.

假设我有一个带有底部导航视图和'片段'的活动来托管所有片段: -

<android.support.constraint.ConstraintLayout
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".view.MainActivity">


        <fragment
            android:id="@+id/root_form"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:name="androidx.navigation.fragment.NavHostFragment"
            app:navGraph="@navigation/nav_graph"
            app:defaultNavHost="true"
            />

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/navigation" />

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

我的底部导航视图中有2个动作/标签,分别显示FragmentA和FragmentB.FragmentB有一个嵌套的(子)片段FragmentC,它可以从FragmentB打开.

在我的Activity类中,我使用'setupWithNavController()'函数将底部导航视图与导航控制器链接起来.(包含在'androidx.navigation.ui'包中的Kotlin扩展函数): -

override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)

      bottom_navigation.setupWithNavController(findNavController(R.id.root_form))


 }
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作正常.

但是当用户在FragmentC中并且返回agin到相同的选项卡时,用户导航到FragmentA然后他将只获得FragmentB而不是fragmentC.当用户返回相同的选项卡时,它是底部导航中的常见模式,它应显示他正在查看的最后一个子/嵌套片段.

我知道如果我们有自己的片段事务但是如何在"导航架构组件"域中解决此问题,我们可以处理这个问题?

navigation android bottomnavigationview android-architecture-components android-jetpack

10
推荐指数
1
解决办法
1148
查看次数

在BottomNavigationView 中切换选项卡时出现延迟

我有一个包含BottomNavigationView 的Activity,这个bottomnav 帮助Activity 显示三个片段。这些片段加载良好,我使用 AsyncTask 来执行每个繁重的操作,而在 UI 线程中,我会显示一个 ProgressBar 直到所有内容加载完毕。
我的片段有一个奇怪的行为:我第一次加载片段需要一些时间来实际显示它,而不是用进度条立即显示它。
这件事只发生在第一次,而且只发生在这个片段中。
片段代码仅包含以下内容:

@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        new LoadData(getView(), getContext()).execute();
    }

private class LoadData extends AsyncTask<Void, Void, Void> {

        private View v;
        private Context context;

        public LoadData(View v, Context context) {
            items = new ArrayList<>();
            this.v = v;
            this.context = context;
        }

        @Override
        protected Void doInBackground(Void... voids) {
            setItems(context); //Heavy operation
            adapter = new DashAdapter(items, context);
            return null;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //shows …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments

8
推荐指数
1
解决办法
2262
查看次数

在导航组件的起始目标位置时如何处理后退按钮

我已经开始使用新的导航组件,而且我真的在挖掘它!但是,我确实有一个问题-当我处于图表的起始目标位置时,应该如何处理后退按钮?

这是我现在使用的代码:

findNavController(this, R.id.my_nav_host_fragment)
                .navigateUp()
Run Code Online (Sandbox Code Playgroud)

当我在图表上的任何地方时,它都工作得很好,它使我返回,但是当我在它的开始时,由于后备箱为空,因此应用程序崩溃。

这一切对我来说都很有意义,我只是不确定如何处理。

虽然我可以检查当前片段的ID是否与我知道是图的根的ID相同,但我正在寻找一种更优雅的解决方案,例如是否存在bool标志,以表明当前图中的位置是否为起始位置与否。

有想法吗?

android-navigation android-architecture-components android-architecture-navigation

5
推荐指数
4
解决办法
5608
查看次数