小编Alo*_*lon的帖子

使用导航组件导航出 ViewPager 选项卡

首先,一些澄清。在查看了许多其他相关问题之后,让我们从这不是什么开始:

  • 这不是关于底部导航
  • 这不是关于使用导航组件操作 ViewPager(就像这个

这个问题是关于如何使用导航组件,当Viewpager是组件之一时。

这种情况有 3 个选项卡:TabA、TabB 和 TabC 也有 2 个额外的片段:FragA、FragB

我如何将它们全部连接起来,以便: ViewPagerAdapter 正在处理 TabA、TabB 和 TabC 并且nav_praph 将处理从以下位置移动:

  • TabA --> FragA
  • TabB --> FragB
  • TabC --> FragA(不是拼写错误)

所需的 UI 行为 想要的状态。 Fragment 在 vi​​ewpager 上方打开 第一个选项:我能做的最好的工作是在其中一个选项卡(例如 TabA)中定义 FragHost,然后导航到 FragA。问题是导航是在选项卡内完成的。这意味着用户仍然会看到顶部的选项卡,并且仍然可以滑动到其他选项卡。不是我想要的。这是有效的图表,但不是我想要的(红色代表托管片段) 选项 1 在其中一个选项卡中带有嵌套的托管片段

第二个选项:将 fragHost 移动到最顶部,并让它包含 ViewPager,使其占据全屏。然后在 nagGraph 中提到

<navigation
    android:id="@+id/nav_graph"
    app:startDestination="@id/tab_a"
    >
    <fragment
      android:id="@+id/tab_a"
      android:name="com.myapp.home.views.TabA"
      android:layout="@layout/tab_a_layout"
      >

    <action
        android:id="@+id/action_tab_a_to_frag_a"
        app:destination="@+id/frag_a"
        />
  </fragment>

  <fragment
      android:id="@+id/frag_a"
      android:name="com.myapp.FragA"
      android:label="details"
      android:layout="@layout/frag_a"
      />
Run Code Online (Sandbox Code Playgroud)

这导致了IllegalStateException......at androidx.fragment.app.FragmentStore.addFragment 一些调试,我看到它试图添加两次 TabA。我假设 ViewPagerAdapter 和 Nav Component 都在使用 Fragment 管理器。 …

android android-jetpack android-architecture-navigation android-jetpack-navigation

6
推荐指数
1
解决办法
1228
查看次数

Android Studio 中缺少/隐藏的工具窗口

所有工具窗口都消失了。我仍然可以通过“视图”->“工具窗口”菜单单独打开它们,但是如何为它们恢复最小化区域?

我只找到了关于隐藏它们的帖子,但没有找到相反的帖子(如何使用键盘快捷键隐藏 Android Studio 中的所有工具栏/窗口和按钮?

谁知道?

没有最小化工具窗口

ide android android-studio

4
推荐指数
2
解决办法
3077
查看次数

如何使用泛型从父方法返回子类型以支持构建器模式

我正在尝试通过继承支持构建器模式,以允许父级和子级的设置链没有问题。为此,我需要父类知道返回子类型,以使所有方法公开以进行链接。

这是我在本文之后编写的代码示例,我认为它应该可以工作。但是,正如您将看到的,使用a1的第一个示例可以正常工作,但是如果我更改设置器的顺序,则无法识别最后一个设置器。

问题是:一旦我从父类中调用了一个方法,它将以类型而不是子类型返回自身,即使认为T被定义为子类型。

public class JavaApplication1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        A a1 = new B<>().setAge(0).setId(0).setName("name"); //Works fine
        A a2 = new B<>().setAge(0).setName("name").setId(0); //setId is not found

    }

    static class A<T extends A> {
        private String mpName;

        T setName(String name) {
            mpName = name;
            return (T) this;       
        }
    }

    static class B<T extends B> extends A<T> {
        private int mpAge;
        private …
Run Code Online (Sandbox Code Playgroud)

java generics method-chaining builder-pattern

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