天天看點

APP首頁面Tab實作(二) Fragment實作Tab2.Fragment

2.Fragment

動态加載Fragment也可以實作Tab頁籤點選切換,但是不能實作頁面的滑動,單純比較ViewPager來說,不同頁面的初始化和監聽操作可以在對應的Fragment類内定義,減少了代碼的檢查維護代價。

2.1 主xml布局中添加FrameLayout

<include layout="@layout/market_header"/>

    <FrameLayout
        android:id="@+id/fl_main"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </FrameLayout>

    <include layout="@layout/market_bottom"/>
           

對應底部Tab頁籤自己設定

APP首頁面Tab實作(二) Fragment實作Tab2.Fragment

2.2 建立對應頁面xml布局代碼

2.3 建立對應布局的Fragment類

public class MainFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View currentView =  inflater.inflate(R.layout.fragment_mine,container,false);
        //對View的操作
        ...
        
        return currentView;
    }
}
           

2.4 主Activity中定義對應的Fragment

private Fragment fr_main;
...
           

2.5 定義Fragment的管理和事務處理對象

FragmentManager fm = getSupportFragmentManager();
FragmentManager fr = getChildFragmentManager();//Fragment嵌套用到,沒有嵌套不需要
FragmentTransaction transaction = fm.beginTransaction();
           

2.6 隐藏所有的Fragment

//在定義事務處理之後使用
private void hideFragment(FragmentTransaction transaction) {
        if(fr_main != null) {
            transaction.hide(fr_main);
        }
        ...
    }
           

2.7 定義對應Tab按鍵的點選事件

case R.id.ll_updatings:
     if(fr_updatings == null) {
          fr_updatings = new UpdatingsFragment();//對應Fragment類建立
          transaction.add(R.id.fl_main, fr_updatings);//添加到事務中
     } else {
          transaction.show(fr_updatings);//
     }
     //Tab的點選效果
     ...
     break;
     ...
           

2.8 在所有點選事件代碼後面執行事件的送出

2.9 在onCreate中定義預設顯示的Fragment