不否认努力,继续加油!
学习整理重点、盲区,笔记如下:干干巴巴,麻麻赖赖,一点都不圆润……
源码 已上传至集哈: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.