老代还年轻 2021-09-21 20:19 采纳率: 0%
浏览 33

关于android navigation的相关问题

是这样,我想做一个和网易云和qq类似的抽屉+底部导航。因为刚学android没几天,也不知道现在的安卓app都是一套什么方式。我是将android提供的模板进行改造,现在/%ra2就是返回键的问题没有解决。

先说下我的实现方式吧,这个是主界面

img

然后点击侧边栏菜单导航到新的activity,然后新的activity有一套自己的navigation。切换activity的时候根据点击的菜单选项传递相应的fragmentId(navigation.xml中的id),然后导航过去后就使用avController.navigate(id)导航到指定的页面,现在有一个问题就是navigation有一个初始目的地,我这样切换会先跳转到初始目的地然后再挑战到最终的fragment。这样我点击返回bar时就要点两下,包括返回键也一样。不过back键可以重写直接返回上一个activity,但是bar设置相同的模式却还是需要点两下才能返回主界面。这个要怎么做呢?

img

img

//主activity,监听进行跳转
 NavigationView navigationView = findViewById(R.id.nav_view_left);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Intent intent = new Intent(MainActivity.this,MainActivity2.class);
                switch (item.getItemId()){
                    case R.id.nav_news:
                        intent.putExtra("id",R.id.newsFragment);
                        break;
                    case R.id.nav_gallery:

                        intent.putExtra("id",R.id.galleryFragment);
                        break;
                    case R.id.nav_slideshow:

                        intent.putExtra("id",R.id.slideshowFragment);
                        break;


                }
                startActivityForResult(intent,3);
                return false;
            }
        });

跳转的activity

public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentContainerView2);
        NavController navController = navHostFragment.getNavController();
        AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder()
                .setFallbackOnNavigateUpListener(this::onSupportNavigateUp).build();
        Toolbar toolbar = findViewById(R.id.toolbar);
        NavigationUI.setupWithNavController(toolbar,navController,appBarConfiguration);

        int id = getIntent().getIntExtra("id", R.id.newsFragment);
        navController.navigate(id);
    }

    @Override
    public boolean onSupportNavigateUp() {
        Intent intent = new Intent();
        setResult(RESULT_OK,intent);
        finish();
        return true;
    }

    @Override
    public void onBackPressed() {

        Intent intent = new Intent();
        setResult(RESULT_OK,intent);
        finish();
    }
}

然后我想问一下目前的androidApp都是怎么安排的啊,是单Activity+多fragment还是多activity+多fragment呢?我看有人说谷歌官方推荐是前者,但我在官网最佳做法没找到,不知道这两个方式哪种好呢?

  • 写回答

1条回答 默认 最新

  • hua-sky 2021-09-22 13:56
    关注

    这种没怎么使用过,用另一种方式,相对简洁,
    例如:

     <androidx.drawerlayout.widget.DrawerLayout
            android:id="@+id/drawlayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/white"/>
    
             
    <!-- 这个就是侧滑的内容-->
            <include
                layout="@layout/header_layout"
                android:layout_width="match_parent"
    
                android:layout_height="match_parent"
                android:layout_gravity="left" />
    
    
        </androidx.drawerlayout.widget.DrawerLayout>
    
    

    点击打开: drawlayout.openDrawer(Gravity.LEFT, false)

    关闭: drawlayout.closeDrawers()
    当然,也可以自己滑动拉开,那个不需要开发者处理

    侧滑的布局控件按照正常的布局控件引用即可

    评论

报告相同问题?

问题事件

  • 创建了问题 9月21日

悬赏问题

  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员