Android-框架搭建_購物商場實戰項目01


不否認努力,繼續加油!

學習整理重點、盲區,筆記如下:乾乾巴巴,麻麻賴賴,一點都不圓潤……
源碼 已上傳至集哈:ShoppingMall.
https://github.com/SmileAlfred/ShoppingMall

day01

內容

1. 啓動頁面

  1. 歡迎頁面,延遲兩秒後進入主程序:

     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_welcome);
         //兩秒鐘進入主頁面
         new Handler().postDelayed(new Runnable() {
             @Override
             public void run() {
                 //執行在主線程;啓動主頁面
                 startActivity(new Intent(WelcomeActivity.this,MainActivity.class));
                 //關閉當前頁面
                 finish();
             }
         },2000);
     }
    

2. 主頁面

  1. 效果圖如下:分析:總體爲線性佈局,下面是 RadioGroup,上面是 幀佈局,替換不同的 FragmentLayout;
    在這裏插入圖片描述

  2. 佈局文件:

    <RadioGroup
        android:id="@+id/rg_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@drawable/home_bottom_parent_bg"
        android:orientation="horizontal">
        <RadioButton
            android:id="@+id/rb_home"
            style="@style/MainButtonStyle"
            android:drawableTop="@drawable/home_button_selector"
            android:text="首頁" />
            ……
    </RadioGroup>
    					styles.xml
    <style name="MainButtonStyle">
    	 <!-- Customize your theme here. -->
        <item name="android:layout_width">0dp</item>
    	<item name="android:layout_height">wrap_content</item>
        <item name="android:layout_weight">1</item>
    	<item name="android:button">@null</item>
        <!--   <item name="android:drawablePadding">3dp</item>-->
    	<item name="android:textColor">@drawable/bottom_button_text_selector</item>
    	<item name="android:textSize">10sp</item>
        <item name="android:gravity">center</item>
    </style>
    

    對於 RadioButton 的文字顏色選擇器;這裏使用的是checked;

  3. 使用 Butterknife 初始化佈局
    a. 添加依賴:implementation 'com.jakewharton:butterknife:10.2.1'
    b. 在 Setting → Plugins 中輸入 butterknife 添加插件;
    c. 在 Code → Generate → butterknife,選中需要的控件,生成,bingo!

3. 框架搭建

  1. 軟件分包
    按功能分包,每個頁面對應的所有功能,寫在一個包內,所有頁面所共有的功能,抽取出來;在這裏插入圖片描述

  2. Fragment 的基類和各個子 Fragment

    a. BaseFragment

    public abstract class BaseFragment extends Fragment {
        protected Context mContext;
        /**
         * 當該類被系統創建的時候;被回調
         */
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mContext = getActivity();
        }
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            return initView();
        }
    
        /**
         * 抽象類,由孩子實現,實現不同的效果
         */
        public abstract View initView() ;
    
        /**
         * 當 Activity 被創建了的時候回調這個方法
         */
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            initData();
        }
    
        /**
         * 當子類需要聯網請求數據的時候,可以重寫該方法,在該方法中聯網請求
         */
        public void initData() {
    
        }
    }
    

    b. 創建各個子 Fragment

    各子 Fragment 需要使用上下文時,可以使用,基類中的 mContext;
    c.

  3. 初始化各個 Fragment 並且切換·

    a. 初始化各個 Fragment

    類似於 ViewPager 或者 ListView 初始化數據,新建集合並添加 new 的子 Fragment ;

    b. 初始化監聽器

    設置 RadioGroup 的監聽;並設置默認選中的位置,

    private void initListener() {
        rgMain.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.rb_type://分類
                        position = 1;
                        break;
                    	……
                }
                //根據位置取不同的Fragment
                BaseFragment baseFragment = getFragment(position);
                //切換各個 Fragment
                switchFragment(tempFragemnt, baseFragment);
            }
        });
        rgMain.check(R.id.rb_home);
    }
    private BaseFragment getFragment(int position) {
    if (fragments != null && fragments.size() > 0) {
        BaseFragment baseFragment = fragments.get(position);
        return baseFragment;
    }
    return null;
    

    b. 各個 Fragment 的切換

    /**
     * 第一參數:上次顯示的Fragment;第二參數:當前正要顯示的Fragment
     */
    private void switchFragment(Fragment fromFragment, BaseFragment nextFragment) {
        if (tempFragemnt != nextFragment) {
            tempFragemnt = nextFragment;
            if (nextFragment != null) {
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                //判斷nextFragment是否添加
                if (!nextFragment.isAdded()) {
                    //隱藏當前Fragment
                    if (fromFragment != null) {
                        transaction.hide(fromFragment);
                    }
                    //添加Fragment
                    transaction.add(R.id.frameLayout, nextFragment).commit();
                } else {
                    //隱藏當前Fragment
                    if (fromFragment != null) {
                        transaction.hide(fromFragment);
                    }
                    transaction.show(nextFragment).commit();
                }
            }
        }
    }
    

盲區

  1. 聲明:本博客根據尚硅谷項目實戰: 硅谷商城.學習整理;

  2. 作爲小白,要有小白的自我修養,任何一個小的知識點,都不要眼高手低!
    在這裏插入圖片描述

  3. 加油!奧裏給!

其他實戰

商城

  1. day02
    第二節學習筆記:鏈接: 商城APP02—主頁實現.

  2. day03
    第三節學習筆記:鏈接: 商城APP03—購物車實現.

新聞

Android項目實戰——新聞APP 學習筆記:鏈接: 新聞APP.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章