不否認努力,繼續加油!
學習整理重點、盲區,筆記如下:乾乾巴巴,麻麻賴賴,一點都不圓潤……
源碼 已上傳至集哈:ShoppingMall.
https://github.com/SmileAlfred/ShoppingMall
day01
內容
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. 主頁面
-
效果圖如下:分析:總體爲線性佈局,下面是 RadioGroup,上面是 幀佈局,替換不同的 FragmentLayout;
-
佈局文件:
<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;
-
使用 Butterknife 初始化佈局
a. 添加依賴:implementation 'com.jakewharton:butterknife:10.2.1'
b. 在 Setting → Plugins 中輸入 butterknife 添加插件;
c. 在 Code → Generate → butterknife,選中需要的控件,生成,bingo!
3. 框架搭建
-
軟件分包
按功能分包,每個頁面對應的所有功能,寫在一個包內,所有頁面所共有的功能,抽取出來; -
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. -
初始化各個 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(); } } } }
盲區
-
聲明:本博客根據尚硅谷項目實戰: 硅谷商城.學習整理;
-
作爲小白,要有小白的自我修養,任何一個小的知識點,都不要眼高手低!
-
加油!奧裏給!
其他實戰
商城
-
day02
第二節學習筆記:鏈接: 商城APP02—主頁實現. -
day03
第三節學習筆記:鏈接: 商城APP03—購物車實現.
新聞
Android項目實戰——新聞APP 學習筆記:鏈接: 新聞APP.