Android-框架搭建_购物商场实战项目01

Android项目实战:商城APPday01框架搭建


不否认努力,继续加油!

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

猜你喜欢

转载自blog.csdn.net/liusaisaiV1/article/details/106048030