<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Android實(shí)現(xiàn)面包屑效果,支持Fragment聯(lián)動(dòng)

          共 2792字,需瀏覽 6分鐘

           ·

          2021-09-21 17:43

          由于UI小姐姐給的設(shè)計(jì)圖中包含了面包屑效果,去github逛了一圈,沒(méi)有特別合適的,只能自己實(shí)現(xiàn)了。

          先看下效果圖:

          先看下逐個(gè)添加Fragment,然后按返回鍵挨個(gè)回退的場(chǎng)景:


          接著看下逐個(gè)添加Fragment,直接點(diǎn)擊選擇tab的場(chǎng)景:


          使用方式



          1、布局中引入BreadCrumbsView
          <com.tinytongtong.breadcrumbs.BreadCrumbsView        android:id="@+id/breadCrumbs"        android:layout_width="match_parent"        android:layout_height="wrap_content" />


          2、設(shè)置BreadCrumbsView的監(jiān)聽(tīng)器
          breadCrumbsView.setOnTabListener(new BreadCrumbsView.OnTabListener() {    @Override    public void onAdded(BreadCrumbsView.Tab tab) {        Log.e("BreadCrumbsView", "BreadCrumbsView.OnTabListener#onAdded tab:" + tab.getIndex());        addFragment(tab);    }
          @Override public void onActivated(BreadCrumbsView.Tab tab) { Log.e("BreadCrumbsView", "BreadCrumbsView.OnTabListener#onActivated tab:" + tab.getIndex()); }
          @Override public void onRemoved(BreadCrumbsView.Tab tab) { Log.e("BreadCrumbsView", "BreadCrumbsView.OnTabListener#onRemoved tab:" + tab.getIndex()); removeLastFragment(); }});


          BreadCrumbsView.OnTabListener#onAdded方法是通過(guò)BreadCrumbsView#addTab(tabName,value)方法添加tab成功后觸發(fā)的回調(diào),在這里可以將需要的Fragment添加進(jìn)來(lái),具體看下面的addFragment方法示例:
          private void addFragment(BreadCrumbsView.Tab tab) {    //在這里添加你自己的Fragment,tab#getValue返回的是創(chuàng)建Tab時(shí)傳入的數(shù)據(jù),可以根據(jù)這些數(shù)據(jù)創(chuàng)建你自己想要的Fragment    Fragment fragment = BlankFragment.newInstance(String.format("我是第%d個(gè)Fragment", tab.getIndex()), "" + tab.getIndex());    getSupportFragmentManager()            .beginTransaction()            .add(R.id.container, fragment, String.valueOf(tab.getIndex()))            .show(fragment)            .addToBackStack(null)            .commit();    fragments.add(fragment);}


          BreadCrumbsView.OnTabListener#onActivated方法是通過(guò)通過(guò)點(diǎn)擊切換到已經(jīng)存在的tab上,改tab再次激活會(huì)調(diào)用該方法,這里可以做一些刷新對(duì)應(yīng)Fragment的操作。

          BreadCrumbsView.OnTabListener#onRemoved方法tab給移除后出發(fā)的操作,這里一般調(diào)用removeLastFragment()方法即可,這里看下代碼示例:
          /** * 移除最后一個(gè)Fragment,顯示倒數(shù)第二個(gè)Fragment */private void removeLastFragment() {    if (fragments != null && fragments.size() > 1) {        getSupportFragmentManager().popBackStackImmediate();        fragments.removeLast();        FragmentManager fragmentManager = getSupportFragmentManager();        fragmentManager.beginTransaction()                .show(fragments.getLast())                .commit();        fragmentManager.executePendingTransactions();    }}


          3、完善增加和刪除方法

          代碼添加tab,需要通過(guò)BreadCrumbsView#addTab(String content, Map<String, String> value)方法來(lái)實(shí)現(xiàn)。

          這里的value攜帶的信息是依附在tab上的,在創(chuàng)建Fragment時(shí)可以通過(guò)tab.getValue()獲取之前傳入的數(shù)據(jù),依據(jù)這些創(chuàng)建你想要的Fragment即可。

          4、按需更改

          當(dāng)前BreadCrumbsView的容器是使用RecyclerView實(shí)現(xiàn)的,item的寬度是包裹內(nèi)容,最大寬度屏幕寬度的三分之一,可以按需更改。

          Fragment的移除操作,現(xiàn)在是從Fragment棧中挨個(gè)移除,如果有更好的方式,歡迎交流。

          源碼地址:
          https://github.com/tinyvampirepudge/BreadCrumbsView


          到這里就結(jié)束啦。
          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩国三级电影HD中文久久免费 | 美女日逼视频网站 | AAA片| 麻豆福利导航 | 无码人妻一区二区三区蜜桃视频 |