From c08ab37762014d7dc9d9e93aa32997a9bf5fbb3f Mon Sep 17 00:00:00 2001 From: liwa Date: Sun, 2 Apr 2023 15:36:47 +0800 Subject: [PATCH 1/3] ch3 --- chapter03_fragment/app/.gitignore | 1 + chapter03_fragment/app/app.iml | 141 +++++++++++ chapter03_fragment/app/build.gradle | 34 +++ chapter03_fragment/app/proguard-rules.pro | 21 ++ .../cn/ExampleInstrumentedTest.java | 27 ++ .../app/src/main/AndroidManifest.xml | 23 ++ .../java/com/orangesale/cn/MainActivity.java | 45 ++++ .../cn/activity/CategoryActivity.java | 90 +++++++ .../cn/activity/RegisterActivity.java | 145 +++++++++++ .../orangesale/cn/activity/UserActivity.java | 67 +++++ .../com/orangesale/cn/adapter/Adapter.java | 69 ++++++ .../com/orangesale/cn/entity/OrangeUser.java | 59 +++++ .../com/orangesale/cn/entity/Product.java | 34 +++ .../cn/fragment/SetDetailFragment.java | 53 ++++ .../drawable-v24/ic_launcher_foreground.xml | 34 +++ .../app/src/main/res/drawable/address.png | Bin 0 -> 1028 bytes .../app/src/main/res/drawable/arrow_down.png | Bin 0 -> 368 bytes .../app/src/main/res/drawable/arrow_left.png | Bin 0 -> 231 bytes .../app/src/main/res/drawable/arrow_right.png | Bin 0 -> 233 bytes .../src/main/res/drawable/button_login.xml | 15 ++ .../src/main/res/drawable/button_register.xml | 14 ++ .../app/src/main/res/drawable/chengzi.png | Bin 0 -> 1666 bytes .../app/src/main/res/drawable/city.png | Bin 0 -> 790 bytes .../res/drawable/ic_launcher_background.xml | 170 +++++++++++++ .../app/src/main/res/drawable/juzi.png | Bin 0 -> 1898 bytes .../app/src/main/res/drawable/orange.png | Bin 0 -> 6129 bytes .../app/src/main/res/drawable/password.png | Bin 0 -> 1462 bytes .../app/src/main/res/drawable/search.png | Bin 0 -> 1299 bytes .../app/src/main/res/drawable/setting.png | Bin 0 -> 1101 bytes .../app/src/main/res/drawable/sex.png | Bin 0 -> 1509 bytes .../res/drawable/spinner_drop_down_shape.xml | 16 ++ .../src/main/res/drawable/sure_apssword.png | Bin 0 -> 799 bytes .../app/src/main/res/drawable/user.png | Bin 0 -> 2173 bytes .../src/main/res/drawable/user_account.png | Bin 0 -> 1045 bytes .../src/main/res/drawable/user_general.png | Bin 0 -> 402 bytes .../app/src/main/res/drawable/user_icon.png | Bin 0 -> 5995 bytes .../app/src/main/res/drawable/user_pay.png | Bin 0 -> 554 bytes .../app/src/main/res/drawable/user_sex.png | Bin 0 -> 1123 bytes .../app/src/main/res/drawable/youzi.png | Bin 0 -> 1798 bytes .../app/src/main/res/layout/activity_main.xml | 18 ++ .../src/main/res/layout/category_detail.xml | 16 ++ .../main/res/layout/category_list_item.xml | 14 ++ .../res/layout/categoty_detail_content.xml | 31 +++ .../src/main/res/layout/content_category.xml | 52 ++++ .../app/src/main/res/layout/content_user.xml | 234 ++++++++++++++++++ .../app/src/main/res/layout/user_login.xml | 99 ++++++++ .../app/src/main/res/layout/user_register.xml | 168 +++++++++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes .../app/src/main/res/values/colors.xml | 6 + .../app/src/main/res/values/strings.xml | 5 + .../app/src/main/res/values/styles.xml | 11 + .../com/orangesale/cn/ExampleUnitTest.java | 17 ++ 63 files changed, 1739 insertions(+) create mode 100644 chapter03_fragment/app/.gitignore create mode 100644 chapter03_fragment/app/app.iml create mode 100644 chapter03_fragment/app/build.gradle create mode 100644 chapter03_fragment/app/proguard-rules.pro create mode 100644 chapter03_fragment/app/src/androidTest/java/com/orangesale/cn/ExampleInstrumentedTest.java create mode 100644 chapter03_fragment/app/src/main/AndroidManifest.xml create mode 100644 chapter03_fragment/app/src/main/java/com/orangesale/cn/MainActivity.java create mode 100644 chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/CategoryActivity.java create mode 100644 chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/RegisterActivity.java create mode 100644 chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/UserActivity.java create mode 100644 chapter03_fragment/app/src/main/java/com/orangesale/cn/adapter/Adapter.java create mode 100644 chapter03_fragment/app/src/main/java/com/orangesale/cn/entity/OrangeUser.java create mode 100644 chapter03_fragment/app/src/main/java/com/orangesale/cn/entity/Product.java create mode 100644 chapter03_fragment/app/src/main/java/com/orangesale/cn/fragment/SetDetailFragment.java create mode 100644 chapter03_fragment/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 chapter03_fragment/app/src/main/res/drawable/address.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/arrow_down.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/arrow_left.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/arrow_right.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/button_login.xml create mode 100644 chapter03_fragment/app/src/main/res/drawable/button_register.xml create mode 100644 chapter03_fragment/app/src/main/res/drawable/chengzi.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/city.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 chapter03_fragment/app/src/main/res/drawable/juzi.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/orange.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/password.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/search.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/setting.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/sex.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/spinner_drop_down_shape.xml create mode 100644 chapter03_fragment/app/src/main/res/drawable/sure_apssword.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/user.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/user_account.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/user_general.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/user_icon.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/user_pay.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/user_sex.png create mode 100644 chapter03_fragment/app/src/main/res/drawable/youzi.png create mode 100644 chapter03_fragment/app/src/main/res/layout/activity_main.xml create mode 100644 chapter03_fragment/app/src/main/res/layout/category_detail.xml create mode 100644 chapter03_fragment/app/src/main/res/layout/category_list_item.xml create mode 100644 chapter03_fragment/app/src/main/res/layout/categoty_detail_content.xml create mode 100644 chapter03_fragment/app/src/main/res/layout/content_category.xml create mode 100644 chapter03_fragment/app/src/main/res/layout/content_user.xml create mode 100644 chapter03_fragment/app/src/main/res/layout/user_login.xml create mode 100644 chapter03_fragment/app/src/main/res/layout/user_register.xml create mode 100644 chapter03_fragment/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 chapter03_fragment/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 chapter03_fragment/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 chapter03_fragment/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 chapter03_fragment/app/src/main/res/values/colors.xml create mode 100644 chapter03_fragment/app/src/main/res/values/strings.xml create mode 100644 chapter03_fragment/app/src/main/res/values/styles.xml create mode 100644 chapter03_fragment/app/src/test/java/com/orangesale/cn/ExampleUnitTest.java diff --git a/chapter03_fragment/app/.gitignore b/chapter03_fragment/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/chapter03_fragment/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/chapter03_fragment/app/app.iml b/chapter03_fragment/app/app.iml new file mode 100644 index 0000000..48547ef --- /dev/null +++ b/chapter03_fragment/app/app.iml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/build.gradle b/chapter03_fragment/app/build.gradle new file mode 100644 index 0000000..3b8a747 --- /dev/null +++ b/chapter03_fragment/app/build.gradle @@ -0,0 +1,34 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.2" + defaultConfig { + applicationId "com.orangesale.cn" + minSdkVersion 26 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility = 1.8 + targetCompatibility = 1.8 + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + implementation 'liji.library.dev:citypickerview:1.1.0' +} diff --git a/chapter03_fragment/app/proguard-rules.pro b/chapter03_fragment/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/chapter03_fragment/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/chapter03_fragment/app/src/androidTest/java/com/orangesale/cn/ExampleInstrumentedTest.java b/chapter03_fragment/app/src/androidTest/java/com/orangesale/cn/ExampleInstrumentedTest.java new file mode 100644 index 0000000..713d673 --- /dev/null +++ b/chapter03_fragment/app/src/androidTest/java/com/orangesale/cn/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package com.orangesale.cn; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.orangesale.cn", appContext.getPackageName()); + } +} diff --git a/chapter03_fragment/app/src/main/AndroidManifest.xml b/chapter03_fragment/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e9dc395 --- /dev/null +++ b/chapter03_fragment/app/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/java/com/orangesale/cn/MainActivity.java b/chapter03_fragment/app/src/main/java/com/orangesale/cn/MainActivity.java new file mode 100644 index 0000000..9083867 --- /dev/null +++ b/chapter03_fragment/app/src/main/java/com/orangesale/cn/MainActivity.java @@ -0,0 +1,45 @@ +package com.orangesale.cn; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import androidx.appcompat.app.AppCompatActivity; + +import com.orangesale.cn.activity.RegisterActivity; + +public class MainActivity extends AppCompatActivity implements View.OnClickListener { + private Button registerButton, loginButton; + private EditText usernameText, paswdEdit; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.user_login); + init(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.register: + Intent intent = new Intent(MainActivity.this, RegisterActivity.class); + startActivity(intent); + break; + case R.id.login: + break; + } + } + + //界面组件初始化 + private void init() { + usernameText = findViewById(R.id.username); + paswdEdit = findViewById(R.id.password); + loginButton = findViewById(R.id.login); + loginButton.setOnClickListener(this); + registerButton = findViewById(R.id.register); + registerButton.setOnClickListener(this); + } +} diff --git a/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/CategoryActivity.java b/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/CategoryActivity.java new file mode 100644 index 0000000..60f3cc6 --- /dev/null +++ b/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/CategoryActivity.java @@ -0,0 +1,90 @@ +package com.orangesale.cn.activity; + +import android.app.Activity; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.os.Bundle; +import android.widget.ListView; + +import androidx.annotation.Nullable; + +import com.orangesale.cn.R; +import com.orangesale.cn.adapter.Adapter; +import com.orangesale.cn.entity.Product; +import com.orangesale.cn.fragment.SetDetailFragment; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + + +public class CategoryActivity extends Activity { + public OnChangeListener onchangedListener; + private List productList; + private List productCategory = new ArrayList<>(); + private ListView titleList; + private Adapter adapter; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.content_category); + initData(); + init(); + SetDetailFragment fragment = new SetDetailFragment(); + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction transaction = fragmentManager.beginTransaction(); + transaction.replace(R.id.category_detail, fragment); + transaction.commit(); + titleList.setOnItemClickListener((parent, view, position, id) -> { + adapter.setSelectedPosition(position); + adapter.notifyDataSetInvalidated(); + if (onchangedListener != null) { + onchangedListener.changeText(productList.get(position)); + } + }); + + } + + public void setOnChangeListener(OnChangeListener onChangeListener) { + this.onchangedListener = onChangeListener; + } + + public interface OnChangeListener { + void changeText(Product product); + } + + /** + * 初始化数据 + */ + private void initData() { + productList = new ArrayList<>(); + productCategory.add("橘子"); + productCategory.add("橙子"); + productCategory.add("柚子"); + Product product = new Product(); + product.setImageUrlId(R.drawable.juzi); + product.setProductName("橘子"); + product.setProductPrice(new BigDecimal("9.9")); + Product product1 = new Product(); + product1.setImageUrlId(R.drawable.chengzi); + product1.setProductName("橙子"); + product1.setProductPrice(new BigDecimal("29.9")); + Product product2 = new Product(); + product2.setImageUrlId(R.drawable.youzi); + product2.setProductName("柚子"); + product2.setProductPrice(new BigDecimal("19.9")); + productList.add(product); + productList.add(product1); + productList.add(product2); + } + + /** + * 初始化组件 + */ + private void init() { + titleList = findViewById(R.id.category_title_list); + adapter = new Adapter(productCategory, CategoryActivity.this); + titleList.setAdapter(adapter); + } +} \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/RegisterActivity.java b/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/RegisterActivity.java new file mode 100644 index 0000000..c2d35bd --- /dev/null +++ b/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/RegisterActivity.java @@ -0,0 +1,145 @@ +package com.orangesale.cn.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.RadioGroup; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.lljjcoder.citypickerview.widget.CityPicker; +import com.orangesale.cn.R; + +public class RegisterActivity extends AppCompatActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener { + private EditText usernameEdit, passwordEdit, surePasswordEdit; + private TextView cityText; + private CityPicker cityPicker; + private Button regButton; + private RadioGroup sexGroup; + private String sexStr="男"; + + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.user_register); + init(); + } + + /** + * 界面组件初始化 + */ + private void init() { + cityText = findViewById(R.id.reg_province); + cityText.setOnClickListener(this); + usernameEdit = findViewById(R.id.reg_username); + passwordEdit = findViewById(R.id.reg_password); + surePasswordEdit = findViewById(R.id.reg_sure_password); + regButton = findViewById(R.id.reg_register); + regButton.setOnClickListener(this); + sexGroup = findViewById(R.id.sex); + sexGroup.setOnCheckedChangeListener(this); + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.reg_province: + initCityPicker(); + cityPicker.show(); + break; + case R.id.reg_register: + //注册验证方法 + validateRegister(); + break; + + } + } + + /** + * 初始化城市选择器 + */ + public void initCityPicker() { + cityPicker = new CityPicker.Builder(RegisterActivity.this) + .textSize(16) + .title("地址选择") + .backgroundPop(0xa0000000) + .titleBackgroundColor("#EFB81C") + .titleTextColor("#000000") + .backgroundPop(0xa0000000) + .confirTextColor("#000000") + .cancelTextColor("#000000") + .province("江西省") + .city("赣州市") + .district("章贡区") + .textColor(Color.parseColor("#000000")) + .provinceCyclic(true) + .cityCyclic(false) + .districtCyclic(false) + .visibleItemsCount(7) + .itemPadding(10) + .onlyShowProvinceAndCity(false) + .build(); + cityPicker.setOnCityItemClickListener(new CityPicker.OnCityItemClickListener() { + @Override + public void onSelected(String... strings) { + String province = strings[0]; + String city = strings[1]; + String district = strings[2]; + cityText.setText(String.format("%s %s %s", province, city, district)); + } + + @Override + public void onCancel() { + } + }); + + } + + /** + * 注册验证 + */ + public void validateRegister() { + Intent intent = new Intent(RegisterActivity.this, UserActivity.class); + String username = usernameEdit.getText().toString(); + String password = passwordEdit.getText().toString(); + String surePassword = surePasswordEdit.getText().toString(); + String city = cityText.getText().toString(); + //判断两次密码是否输入一致 + if (password.equals(surePassword)) { + //这里也可以再进行其它的验证,如是否符合要求等,符合就进行插入数据库操作 + if (!username.equals("") || !password.equals("")) { + if (!city.equals("")) { + Bundle bundle = new Bundle(); + bundle.putString("username", username); + bundle.putString("password", password); + bundle.putString("sex", sexStr); + bundle.putString("city", city); + intent.putExtras(bundle); + startActivity(intent); + } else { + Toast.makeText(RegisterActivity.this, "请选择地址", Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(RegisterActivity.this, "账号或密码未填写", Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(RegisterActivity.this, "两次密码输入不一致", Toast.LENGTH_SHORT).show(); + } + + + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + //根据用户选择来改变sex的值 + sexStr = checkedId == R.id.reg_man ? "男" : "女"; + } +} diff --git a/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/UserActivity.java b/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/UserActivity.java new file mode 100644 index 0000000..8160243 --- /dev/null +++ b/chapter03_fragment/app/src/main/java/com/orangesale/cn/activity/UserActivity.java @@ -0,0 +1,67 @@ +package com.orangesale.cn.activity; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; + +import com.orangesale.cn.MainActivity; +import com.orangesale.cn.R; + +public class UserActivity extends Activity implements View.OnClickListener { + private ImageView userIconImage; + private TextView usernameText, userSexText, userCityText; + private LinearLayout usernameLine, userSexline, userCityLine, userPayLine, userSettingLine, userGeneralLine, userSearchProductLine; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.content_user); + init(); + } + + /** + * 组件初始化 + */ + private void init() { + userIconImage = findViewById(R.id.user_icon); + usernameText = findViewById(R.id.user_username); + userSexText = findViewById(R.id.user_sex); + userCityText = findViewById(R.id.user_city); + usernameLine = findViewById(R.id.user_username_line); + userSexline = findViewById(R.id.user_sex_line); + userCityLine = findViewById(R.id.user_city_line); + userPayLine = findViewById(R.id.user_pay); + userSettingLine = findViewById(R.id.user_setting); + userGeneralLine = findViewById(R.id.user_general); + userSearchProductLine = findViewById(R.id.user_searchProduct); + userSearchProductLine.setOnClickListener(this); + setData(); + } + + /** + * 组件赋值 + */ + private void setData() { + Intent intent = UserActivity.this.getIntent(); + Bundle bundle = intent.getExtras(); + usernameText.setText(String.format("用户名:%s", bundle.getString("username"))); + userSexText.setText(String.format("性别:%s", bundle.getString("sex"))); + userCityText.setText(String.format("城市:%s", bundle.getString("city"))); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.user_searchProduct: + Intent intent1 = new Intent(UserActivity.this, CategoryActivity.class); + startActivity(intent1); + break; + } + } +} diff --git a/chapter03_fragment/app/src/main/java/com/orangesale/cn/adapter/Adapter.java b/chapter03_fragment/app/src/main/java/com/orangesale/cn/adapter/Adapter.java new file mode 100644 index 0000000..95f6552 --- /dev/null +++ b/chapter03_fragment/app/src/main/java/com/orangesale/cn/adapter/Adapter.java @@ -0,0 +1,69 @@ +package com.orangesale.cn.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import com.orangesale.cn.R; + +import java.util.List; + +public class Adapter extends BaseAdapter { + private List productCategory; + private LayoutInflater layoutInflater; + private int selectionPosition = -1; + + public Adapter(List productCategory, Context context) { + this.productCategory = productCategory; + this.layoutInflater = LayoutInflater.from(context); + } + + @Override + public int getCount() { + return productCategory.size(); + } + + @Override + public Object getItem(int position) { + return productCategory.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder = null; + if (convertView == null) { + viewHolder = new ViewHolder(); + convertView = layoutInflater.inflate(R.layout.category_list_item, null); + Log.i("adapts", "getView: " + convertView); + viewHolder.tv = convertView.findViewById(R.id.categor_titles); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + viewHolder.tv.setText(productCategory.get(position)); + if (selectionPosition == position) { + viewHolder.tv.setBackgroundColor(Color.YELLOW); + } else { + viewHolder.tv.setBackgroundColor(Color.WHITE); + } + return convertView; + } + + public void setSelectedPosition(int position) { + this.selectionPosition = position; + } + + class ViewHolder { + TextView tv; + } +} diff --git a/chapter03_fragment/app/src/main/java/com/orangesale/cn/entity/OrangeUser.java b/chapter03_fragment/app/src/main/java/com/orangesale/cn/entity/OrangeUser.java new file mode 100644 index 0000000..bc3e24e --- /dev/null +++ b/chapter03_fragment/app/src/main/java/com/orangesale/cn/entity/OrangeUser.java @@ -0,0 +1,59 @@ +package com.orangesale.cn.entity; + +public class OrangeUser { + private Integer id; + private String username; + private String password; + private String sex; + private String city; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + @Override + public String toString() { + return "OrangeUser{" + + "username='" + username + '\'' + + ", password='" + password + '\'' + + ", sex='" + sex + '\'' + + ", city='" + city + '\'' + + '}'; + } +} diff --git a/chapter03_fragment/app/src/main/java/com/orangesale/cn/entity/Product.java b/chapter03_fragment/app/src/main/java/com/orangesale/cn/entity/Product.java new file mode 100644 index 0000000..79c6526 --- /dev/null +++ b/chapter03_fragment/app/src/main/java/com/orangesale/cn/entity/Product.java @@ -0,0 +1,34 @@ +package com.orangesale.cn.entity; + +import java.math.BigDecimal; + +public class Product { + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public BigDecimal getProductPrice() { + return productPrice; + } + + public void setProductPrice(BigDecimal productPrice) { + this.productPrice = productPrice; + } + + public Integer getImageUrlId() { + return imageUrlId; + } + + public void setImageUrlId(Integer imageUrlId) { + this.imageUrlId = imageUrlId; + } + + private Integer imageUrlId; + private String productName; + private BigDecimal productPrice; +} diff --git a/chapter03_fragment/app/src/main/java/com/orangesale/cn/fragment/SetDetailFragment.java b/chapter03_fragment/app/src/main/java/com/orangesale/cn/fragment/SetDetailFragment.java new file mode 100644 index 0000000..14ad354 --- /dev/null +++ b/chapter03_fragment/app/src/main/java/com/orangesale/cn/fragment/SetDetailFragment.java @@ -0,0 +1,53 @@ +package com.orangesale.cn.fragment; + +import android.annotation.SuppressLint; +import android.app.Fragment; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.orangesale.cn.R; +import com.orangesale.cn.activity.CategoryActivity; + +import java.util.Objects; + +public class SetDetailFragment extends Fragment { + private View view; + private ImageView imageView; + private TextView nameText, priceText; + + @SuppressLint("SetTextI18n") + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.categoty_detail_content, container, false); + if (view != null) { + init(); + } + CategoryActivity categoryActivity = (CategoryActivity) getActivity(); + Objects.requireNonNull(categoryActivity).setOnChangeListener(product -> { + Log.i("sss", "onCreateView: " + product.getProductName()); + imageView.setBackgroundResource(product.getImageUrlId()); + nameText.setText(product.getProductName()); + priceText.setText(product.getProductPrice().toString()); + }); + return view; + } + + /** + * 内容组件初始化 + */ + private void init() { + imageView = view.findViewById(R.id.category_product_image); + nameText = view.findViewById(R.id.category_product_name); + priceText = view.findViewById(R.id.category_product_price); + } + +} diff --git a/chapter03_fragment/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/chapter03_fragment/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/chapter03_fragment/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/chapter03_fragment/app/src/main/res/drawable/address.png b/chapter03_fragment/app/src/main/res/drawable/address.png new file mode 100644 index 0000000000000000000000000000000000000000..7318be016a0fea789da57d99dcecd6485834d90d GIT binary patch literal 1028 zcmV+f1pE7mP)5000BaNklDk%Y z^L1WPEtqb%ySve7d?6yolv15K!uE{TxjPY%sF{WvH z!8)_=MtOV2+5Z`4zRuVE#u(eYwu!B~+Ih6Z%+n?3e~qGOr*AxXVHOt`uU=VM`9VYu zDWyIrNiZcM+lc6#?yu{Y^-*=#E{ zy?(!c?5x`B%yss*@F3cSOJ_lgk^>1IP5;w+J-?8Snmzlq+I$sOMy`3W#rtp<2 z;i5bihM8ZiI&b%D!#JRi0bHt6E?1sS%zSqpkYE_C^>!k%^K z@3t(*3%)0>owB>TQ=PG7? zuqx@uDiJgsLb>I_RlT0dM%bgI}Qev%zXd`wC!WDw3Z(t{u zHYvQ~Rufr4Id#3=)9Wtv{9ls)|3|=>j~Fu#CK<@gvs&xN|9blFp)qC^0QO>xZLRg) zs8D0fD*$W}(eY;}#+Xe2umI2|qHa?tGe0LuvLU6sC^cVFX6BX<;s5})iRgS7)Hyfp zy?;Q&bt&cT$Lx>VWLY+kh^In`j#BEZ3TmyL3n5$qK#Pd(2WKjKnCJOSQ52VmxFe-J z85CG+7efd~h`21JeENRjuf=xGO?mHcVvJU6eOL;uwQC`S-CnP^kf!NN)$40F#Tau9 z0Q*9SevGk0L`%cGtp%21X6_;)Dy3HH(r*N;gVcsH3ZQW)e}zuqm)`)Eo@f>Q6}kKX O0000pWc?Ln7SYUUTGXFyL{y_+-L2 zAe`!S*CTxHOaYa5+UMsh6?*@xD4H)SFgHMSO;ZNrmzui=x3C_U*gmtg{5?mI(WBPg zVrvvVtUff)J{GxgZrBp0n>&66nk-;)XI@nxvOtKP`KkqnM58sE+rxj{bK=E91%L6o zDJUkmcuK5r3u^FE;a%Yr)X1eGyTkEWRK)$GCSOn0@3MV=&eJW%A&v1%tmz}I4l#%G d*JWL}?QZm^Xy&~w{S0(DgQu&X%Q~loCIB + + + + + + + + + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/res/drawable/button_register.xml b/chapter03_fragment/app/src/main/res/drawable/button_register.xml new file mode 100644 index 0000000..3eb0673 --- /dev/null +++ b/chapter03_fragment/app/src/main/res/drawable/button_register.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/res/drawable/chengzi.png b/chapter03_fragment/app/src/main/res/drawable/chengzi.png new file mode 100644 index 0000000000000000000000000000000000000000..fff03064b0057c455eb8cf7525fb18cbeb3d9d59 GIT binary patch literal 1666 zcmV-|27UR7P)D=Q?yt` zgL^K3ZRLf*#XIUe*_u;i3GU4nB(iit*~G{uLY8F8Cde!TWiv1f0xzV~%pfC%v5I>4 zYfR8L76!Ll8P$qI?uQ`go$|uKOe^@|z{E7N>sayVo@;u&0$RPHFmT3-a7BaXGZ43x z7X&w1!4EYirV&G=vcdB(gO`^V23K1Vtqi!QuoEXhSX5pRJZmLpC^2!3L`tl|y`KmN zUoHq9up+v>-cv@zPnH)3=Uc%KCC1c9WrJr9gKM}Ci#B?K;Y7lHyVQjrOrKJH&y~)W zd6zpoNyw?pWXzjP0xp2KotfGp(XJ`&ggCI&P9OW2CNU933|%JgK`kYstmSb8MUWJG(Na zG~}}qYsrXSU6r0e9R-L<+h-(rN4d-CTW#h zu)LqjT93xV$2G#fnKv_ON11t+Rk7j4af_zOm6_|$owoHH(fzrvgZZuDP0k*>u{1l% zTGm=N!n>!tq^=vcahyG=;YUj;3t~MqW0scgQ;j9BbokSQywA|nn%w!pSU4BptSUAbt?#IdFQq}5>jG|v)|Tbpb?+C z55UuQNz;U{QM{pNW8M+Xrye3;ahejdB}>EsQQA@zue5#v;ci=uX#yLs$-*1@cl#7w zTAcuHNmFiiWjhsbXiV%o;!}+tZ^E}fyNY)3RC3}c5<-{z7P`U;@ z7&-aTJTq?d$?jA404PZ|IXiKpvArg&Rk9k575C*0@DEfU}X zFD)rCWh}kRYc8RuOP8OoSYW0pLB-Kc@0hQ;(&zeuL90??z@~`hS6zd*uPP^B2+?R$ zBPDQK%?BeRt=hGhh}NVeJBuQ=+d+{ht3P+P1lNIKzng9`F`ciiy5X_+$c znAtHy!X~!vSG{0V+Zw&023t5@NNB{!Nv~2jBSl-6=rM@iio_cuOGYAd#+T!k5P_i{ zY%@M9#|by$EgOlLiL{GoA3y_oN<(jsTLkknX2%H8nzoD>!96?gnx!aW!*DIl#uBUR za!0)5ga2GwgSIkNIr)kp?@;XkQgS?PRyvwrEhdR#5Q+ih*etVFFlt$#Ho7TolgIk0 zt`%b5oqMm=#}5jD$wWLEOp_UyV#N0U7Y-@W?r_rA{ac<^_{}hX0R}#BQQ@)#!~g&Q M07*qoM6N<$f;J}@jQ{`u literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/drawable/city.png b/chapter03_fragment/app/src/main/res/drawable/city.png new file mode 100644 index 0000000000000000000000000000000000000000..790fb2bf39c33588894e33135a78fc1c05ed6caf GIT binary patch literal 790 zcmV+x1L^#UP)&Rd)Azkx1s<6Vd&j0As9)Z*~+qJ9V@fa4!+P{tX}Cn;o^A z0#97z2mE6~ArY9|$W0q=J1aL74vbT;Z%FVmj;V60)XN)l{^KlBNLW;uIF({2YuBE2 zcC5=9TWbna9I^Z8o0G7cl2!yYdy`1SwG$;-psw+IfN$Dm9 zVUm|{P*tj+F;%2fy_G)hks&M$df^`vz-0I;1liSc%k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/chapter03_fragment/app/src/main/res/drawable/juzi.png b/chapter03_fragment/app/src/main/res/drawable/juzi.png new file mode 100644 index 0000000000000000000000000000000000000000..106df92a6a38fdf5074c2969a512e2e19dde5f7d GIT binary patch literal 1898 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 TO|NVS00000NkvXXu0mjfhY}6P literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/drawable/sex.png b/chapter03_fragment/app/src/main/res/drawable/sex.png new file mode 100644 index 0000000000000000000000000000000000000000..acb8197caace6c0653da7f1ea3a90af3eac20179 GIT binary patch literal 1509 zcmVfmCLe z(i0-0qM`_b%)nljrlo%r6}^jyGTlsPz7uDdk=b>2=bPQ_z|699f9H39-}%lx_uNaU zV|{&n2eq`c{8JvPb9$jrIERQ%12CJ2rmN~l05+=X=b23A&DPe|Kk9K(J%IOq zv#PFR=H_}>8;_!BIT0-daNscbFIBbEIrrRfoOQ)TQFLt_$D7;R+rO4CNa| zQI3c@%Hs=}`N>+?F%jpzU!3=J_kM+{-lM8FI_F+&NL+V!_uM#+E%cu<^9|L`xm+&Y)YSA3fb_U= z%264A#1wlMRIMui!^ ztE=naR4Qc!`E_Q#Dv>zv{Q^~e3c$FsLu@$@;6Y|yX213I^&P%<@7|vP{LajWjzpaI z{!~@{48Wu5bo#zRp2&(SnmOmaw;U)%NL61TqMKB8D-j(I;E?L%7m;rO9MkAZ zt*VcA19%vKm80pE`e#LaKXD>*BY+pm&S9}w+?YzG-T|<#SS)s?QYkB#R?AlJ+O;d3 zIC0|3s(J|#nNRP|ojbR8c6RPa8buMYe7l*5&JDxxLlLpLz|3=o5+?vUnEC0huC9wK z;>jvl_=*bplWeJ5ZoQd@iPES zU=mx`-`{_EE|=R=3oIhm?MwkMV4+p8b?aOdMVAuM+xBz-j!L3vFouX`gkiX)@_SED z&r!u<@l60H6VduG3@@t1TT`5f%p;;}RCNXsoujJhk%+4JsOqoIxv5bUS;t}z`%ro8 zYi2%fDDGN0SJ{qAK18%bRma=@JQ{%j{snMAmEgOab2itIHb9(+{05*>uN;7v0n95e z^-*doxo-!sK91w3v)OE^Sx6+#d%s#$ZwK%rfGe5VRvbjc3goHvh!T#kV&=ONVo{2m z_x?IneF?xX%xs0WWchr4N)QAMogapc1kr{t3}+`6m&@fQHZ?U_lq@kXWajs(#GM}m z!M^{Kk`9BjE$|Bf+n9MlJwD3k^A!QFG4s{c4kBW&U}Zg$5sd%H%tzMqqbQ1&*wR+j zUgw;hn)aE9R65mqJdKRc&tx*2YPIEqNk~K<2e4RG7dz+HR0F*CR^vWsWac{9znOV* zQa%&+Dgf)F<}f_Ei%dr6_B3Wx#lM)Vxi{to;Y&QE=QZ9?!v8wvDb)(L? znh_EaJMJazL~72hs%xBci<1f~y;l1Y5i7vg0jOEQySuyXD#7a0NNoo*TWi#imBd-M zKty)WVIAmDt$T;6<{DxzgM%PAyREIw4nhstJ|QCV0DybVTUD=d&eLQ`5K(IxWbO0&aU5^ky?ghTNs}f`i{p4^9LFbA zUBV1Cr`;^A48zdQyCb&!USU3;pOs3bysFL`hINmswy3JzubmPE!6}A~<9I88t=VjL zOlo7z{IX_X{P^+L6Vd7Rv4{mh@Pn$_&E&`Fbo$+;OP5+J^}pJGUSnJtr>m4M00000 LNkvXXu0mjfbOPYO literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/drawable/spinner_drop_down_shape.xml b/chapter03_fragment/app/src/main/res/drawable/spinner_drop_down_shape.xml new file mode 100644 index 0000000..64306b1 --- /dev/null +++ b/chapter03_fragment/app/src/main/res/drawable/spinner_drop_down_shape.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/res/drawable/sure_apssword.png b/chapter03_fragment/app/src/main/res/drawable/sure_apssword.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7cee9bcb90d569021e5cb4e81dc999fffed57a GIT binary patch literal 799 zcmV+)1K|9LP)50008!Nkl%cOxuv3|CMvP= zfe#48!Uq-x3?jY))`CKsh;a9gY`6;{X74$BlSn|fJ!fXV^Pkz7IfNDT(F$Tg-7q53 zNJLEl_NeMUB6DtP4g&ZUX2`3#h824Gj%l`F#FI7N|@x#bR-%<2Yjg z)&sbqs$-7hy!AY9G7Q6}N~N-ki1q_G3!tp3=X~EEu?4b*>F@7fm&@h80r(D}i<$4H z1rd=G0ImX9OGM3{=e@Q8vW5|naRANCyxPWbyhlWS0+^nenb}Y%6v`$$E0`b%ibUiC zILgcqO-_?_5jg_j0e~T9?lIX}!HCFLBKqKY-a(VY`RidAK2gv`U*tT161wy5e$0B4x_ z_M%{tlQFXqyvE<9Hp&_U{D(=Cctt29B60IOrK&psv;laQHF@XkpS35VcdB}and7GV z$G2e4#2^5kFCw_fv~?k%G?;q;c2|3lb;UIiR4a1avnH7N`2788Fw+2@GV@7OfUN5x zG78`TGq16Qv8oHPvmgkLRaKnuegD1*uGSBcri>L#;y3}YDQwFEQ!Ew_Igaxv0Z4*W zDwV^%y}gg?DHU}qv(O1e#Hi@9C{rqxHkHfe&j2nk^K}t958zrZm)o4r=fC__W#V8W zG7O-jS`g#HHp0xQgL*aLXGe;K8gJd#l$<;Wf({}YR@F|M;d@!GDS;Un7-(}{cRY%s z_P)M8W6St=V5+$@&dlwmg178BV*@aEPd(QZckCR1i_AQcHDHbLGj6_D;@2iKw_5e4 zBq;&>0+4wKuL0izU{zYOr_R8GgM-_nD9RI2<5DT3s#C7(mU?=6-dhh>OBFn;ALHvF dtHZ_Y{|zt=$ul4FLf!xX002ovPDHLkV1iDBa5w+} literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/drawable/user.png b/chapter03_fragment/app/src/main/res/drawable/user.png new file mode 100644 index 0000000000000000000000000000000000000000..47d83629275e35c23b93983c4a11e55c3abc515d GIT binary patch literal 2173 zcmV-@2!i*CP)% z4UAk>75>ibx~8dMqM)KiKoQfT!2p3mMIlO5sHor%LX4ue#2RDQ?mc&RG3nIUuJ_#8 zU4H@wK`l{)fS?70K>TSHwG}X0l`4_?6C)PT7`3~)%)Ddn`eyR>?QG}WH`CoFy~!k# znRCu}zWaaAIfNsu(GkWMi$-{CZ0x+gzP^(Hyqt(mQq_RHPgVC3(Y~pvsU6j7^*@Jt z01g@9$;rv%>h<~>0OzXe#Q>gNfXr>G`n`dHf$f8XgO3-Gj~3}U;Xrg|X67m)S_|NX z(H{L@;V-Is{lLJ$b-gCuQ^L-<^+a@a0it^WBmhq7&>?~N7HjRbB|C1OTF(fJ$d>?o zpp9ey0I)+8=So=SGNVYt|7W`f7iFzb(7|y!X!oP*c_SX6>r# zsI_*i8`5177LoS@_)5;H&DPp#H%>KmopV(p+LW_(B{Od;Yriz%TCH|^k|Yo1Ms|%c z=G$eRX{YDCzerW@&iNgzoi$e5ahl0*Qo0HjPB*kd~+FFMRi2vJpi%< zOLcPel%ANFSXQss{|w+c!C4}@&lvNjqK%E^;)eWhge=+mXF*c(Kd+%pd^%*HhjhRghV7Ia& zvIW3sI;EdB#tg*Rj3z81e+BUT6y$zpeq#(^x3b>*8&tLVRNT+ZFNm>OhVUZ*Rs;}L z-EXap0*rC4ovd^2ZX&uU{ckTbuZ*!-hVTObRyRS2=%vP(-^YM zh=jLyc!SS2RXy8U8y*#fTQuQdSwzAmK3wLT?X}GO!@{T~1V!Xr06)m6{)U-n_mY@a zmT-tS-<1KnotfVe0~{+WBHsYedIJ;DurbEP+9^difOzlkRMod+0HZJRMV%E929PE9 z;MCOAIn`>lUercYt~6m0$&WHBmC6}ILqiY8I&m=h1wu*hHpbjq2B$RPbS=*b^Mv0T zjmC*1BO`w(<4j&>Y;5d=zP`Tvk@rPrzN)PKt_Y{3Lm=<;oC94&7E` zk_~!Y6HcAeyc0xpm#T)*m=kgAkbA3wR#XoTzH*#O?zrc=Jj%$IcPtRnySjBq;AAuBMv5HJz_8^9h_4WERF zR;ubLnX6(u)lW0?ND(qcWO_YMt5x-aQ0f3+w(KF@F!zPBhfwm+Xf$>X z4-W^j^IDo@Uu~@ox2>*PSA=V|+VQIT`R4QuS^K`ezAZyTLm}?fb<0!}G!tq!)$8@a z(b3T-%Nj3D*n7V=96N1*!+Z6XFfGf5Z@u?nx4ukOF9Q%#r`a|YvL4pj8_ST6ChVMB zQK?iusj5XD3n5Ydn5sTjsZ<`VR4RKnZru22*3obzB}uX(Ns^O^=w$%Hr(@!qh;B`i zq-w1V- z_4{A5&Rs!7Asy1n@)aO+Fp=G1kFeH;Saf)Y zPXHLqDyZtc)6>&ys?};JlIhqA6ZYP3Q`Pt7EVjKfJLfJYqPGGF^;ySs^kS~SQvkx# zbGx%@^=onRf zZqOs5zp3g|s`@w){kqX;JW}MPl~(nI99OFm(S$K(V<&$)5*CpU1DI1MRjE`i9U2-6 zcjqN*wOZ|xBuQ@1Ik29YzfgLFH*MN<^z!A)Ly)W$J0hY%W6WokjA;hgd%r%h?xig7qcgE=r%>3DZvhAw|IkX6_bnCSfSaqy+|JBz>omflMmdz@ zhy3f#Ue!J?RwtyDw+s5;@$s-&jxH9?5l8rcSA1-0(oqx=00000NkvXXu0mjfzj!Im literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/drawable/user_account.png b/chapter03_fragment/app/src/main/res/drawable/user_account.png new file mode 100644 index 0000000000000000000000000000000000000000..e70142aef6c941e1cbd7a0b73cb636eaf598b665 GIT binary patch literal 1045 zcmV+w1nT>VP)OlMrbW68Wlw)p@P9uOm}uS&CZe8X7b$KnZ#V?)7*3azkAO; z=gb*lK4XVn$r9a+avLI*xuvSZ2;Xx_j&i^l4k{;s3}d6UNVpAnWYS*brwQ;a(=?8t z*>)1;C;fE&!LeiqA}zoW%3F{O%H~!KVEMP)jIuGaaSB__=Pzd~5n9 z9Oq}?B$ly0-`f0OGt~*&1gyg{2Id9zj7_@+_zI*8E7Ck$V=mZC-UV_RWG`0a%cC?A}e@b&U>13?=of|LZkvKvT9!{)n8S!`+BN3PUXI7p95Kr z=mz3OzyC+VvzV%4V`z30iSo|_-Fa;E0VI43SUNkB{ax)@H0ia3-C9c>NH?MfD2be< zT~aeP(WVhHsnw|L0Cn%Umu#e&E}0Pv!NHzoi`|C93ka1cV+el&BW|k)RG?HL?g<$t z#2dtoc0ca~FO9ALuD}WRfNUxt+D~ZwQ97=4>wxbF4mR!6fZHT=q1k>2pJIuQGtN4Y zI?x8-4=m$GUn;q%3@}Xlcc3a?Coz??_G7>&z!@xKji0JNxFyw%Y9p`(%lNdYpw~7D zuMsz1DrQ?89J8-S7zXLVifs2gMQ+|}6or+x(y zbe8ok3~Z)j;8^qOt-YRF*-659cY)wstNTj6T3ht=?r)D?(c#tke764q8UA!G0uacS P00000NkvXXu0mjfj0o`N literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/drawable/user_general.png b/chapter03_fragment/app/src/main/res/drawable/user_general.png new file mode 100644 index 0000000000000000000000000000000000000000..cf579477be3e1bb299522bba2a8bfc27fb1ef0c9 GIT binary patch literal 402 zcmV;D0d4+?P)T1>Z)AKXD*b39g)*r53M?X&D;=MB3EsVC^;DHkhleEIoF{rjJ9gvJ|eFHGDkbT=DYXe}B7u`Tgk=p*RM~zy9<_jG39KWU}j~=@bPuF_w{| whG4Zwj-kZp8MT<0P@;;O(V(VEFcM=30DI2tA7r+V#{d8T07*qoM6N<$f)V+|y8r+H literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/drawable/user_icon.png b/chapter03_fragment/app/src/main/res/drawable/user_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d5309b1e40b0dd814a99e7e4f33fdd00098705a2 GIT binary patch literal 5995 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 KlRg~8&& zy#Dr z?Y$gwW~*0rn$>a;)D-xdiK?J(IRxs!t%03*S_codHj9CGH%fPomTO+V=CGQehU2zG zH3tCK3)@r#y!QF&3*b4%A)-=v_@u%j;JknJV>6~i9EezQF{T(eUcuC2hQRN;8_ux{ z))u~F=GrE;Gp`QLr!=m9AAoE%gS8u_#Ih{$C^2&}IuW%pR?v9x*p>{lwv>yqwu$}B zlj2BeRKE6i#XAqnzZS2pJ7oz{A}le-IwHaIYVdHK?09PP@?ac-I=L`J3Zzb?M@GuG za>_INGiqutPG+?_&{q3UF9o$kH!U4%G))>~)zoN$?yQ)|a*5g|ZM;4B06Z9@ z#9Lx9l|mwAW(a9gl6vcd)`zlfk!=(K(ZoWOR=m+R(!I>?oX-rqOBb@cu&LSy-M86% z^Zm{_-*?U#!d3dwRdVq^{I9Ki)=T}k$!j?pC|MaO_+~%+IS|neP{glPx9O*BM!hUp z)2&Jp+{%CpK-td7G&b8ae4`8|zkd#(A=t8+8mqrrY7k4pZX>jZh~An@#60y*Xym$8 zY^`)2Cqx0h7ll|O0~agg>?LPVad0nr)weU@8DUMg?tIbrd-9~615j_KfTek;~#%DZEUUfsNM4B1?7Qn3$%U;tL8NM4NO#q$b zRqL~YJ*L&b;P(Nv81B5*c#UsDly9S^>K~GmJ=Pn#Sz-E`!Dmf({(9~hXn~++5O!0Y z`fgV66TQ}*l5qmyTq3@&XVzZ{qSpW%Ca?O)g61-}hmf&- zFX%aXYRj7$_pzrp`XIA?BnHS<2lw=a%h^UBfQrP+Tcdv*ci9(0WiqVzuPNd|<@(YI zv7)?yZM+&D>t7|Uhvy-}C?IO6u4*h9=L0?+1mFBV*7RTtglL{SqnO)?=$<$_%1rGf zcrO_17tg?D&m7tlo-8HsR%g3`&>KJ9DzFIWj)83u^cldvFE~Jw@i;I_3TpJ4ys_Hu z=@l}!xSZLpV4{*n>&K!y?2CoPGI{|l&j2(6JNG;1q~flV<$&x1V*!2{#^eGxw!HiW zKqWDl_8IQnUFqtS>HkzXY`Ziz<0N=tP5HOWcx*fUP52vN*)opH>QmzFwM?)Vp_fY@<002ovPDHLkV1ns25UT(H literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/drawable/youzi.png b/chapter03_fragment/app/src/main/res/drawable/youzi.png new file mode 100644 index 0000000000000000000000000000000000000000..53df9597b63d8e0f6e14d1d9703a308cb209f24e GIT binary patch literal 1798 zcmV+h2l@DkP)Gjf5y&T~1*QQ~>1Y!!DV2ofRA`i0Sc>boluI!!(qd*hxs*08leSpd zl%?W6W+iToj;Z64OA3f7B&jSuk&wp|-fh179-1t^d*8w|jpr|T-}%ltzkAMizVCil z;(sF2|Ad2^Af9A0W@C)WnsH@PWo~)2DK=hbKUO2Z{ZzbC}&|h|U|ZXM2-)%MrQ4 zad&V+SW{h40On4iO3c+I_HBjpaziVQU5b-T`t@>U^=6;|SgjVyuON{tdYFwmdAT*? z%oEn-XK0yzCqZ4CH5l9F0~e3kvdVtExVqqWU?yoG&P@o!y- z!DNbRD(P=A1RGiy9kvtY<@WsY>MMB_m#VCGvs@+50DkhMy!@IG;2|IZm;?j>Q-I$9 z@xDQ;{FOYbXk@U0)&12turKGT10&x%Y;I|#SC_Ql!v9KQjws;eG z?YaH{dD>uL?y@B~o=kqKjbwO;vXV5Kn4PZIZeU}|5LyGnw5$Pl(7py47aYu(l04c= zx){Ce$VF#(3dfbTATCD1bd!Z7;9hqDsvY+w$Skv&=SmBd`UlAZ@&zPa6i986 z^!FfFZANw+QHC9m6lft87^F7X8|nE9WT7E|LFI*nXb5VD(LzsP8StEjdG)IL0%Sfg z!F~ZGDFRs*``ERND1ZL@ch{JNSTqG0hGwJ#zqmS?$2{JG%mO9~2qivU3}Ri>=_pc! zv(&`;aFte#jwCU~(2T!;0j_T55sWt=Vo!Lt2Errn*Cy>TS~%@ZiFpdrPn?6C5N1~< zj?^uoI;pWBNtSxEcJL6n_a!3EFJYcM6i+~+TZD6P_f~=ksZi-(=wH*7bRDmj z+mKPLShflsAddH%L^DWiH2dbyrgJZG@bFs9AeogmEyQNyY>O!JZ8k*4&uTHR38Yg8 z(vtf&nKC(D4wdxXkgNAz|8%eZRyzc)a=PwXb>qyS*-f9U8 z4|BDte|c)CV`&OTir`q5wdmgaFIPJp%ArzqR#a!iVqx0op`=ZHho+i>(-&k~?-{^pMU_>rl*|+tR}|b9ODmu=a7c|gRUoY+ST}YQ z$*;bo#-wj_T1Js;y~tePV>K34fryjE(LJD)RXw7dr9`>7+Nc`G?sSr#=IG|_56eRATgn#94|VhysG+6T*v%|3@%zs{>u}UR{}LLx>rhwXLyx^FSm)#-iWek3-opF z@6Ca_{k~Q#ZfOUmure@^{-20yZA4kI8d66p4n;xNJyL50N$JP_E^)-AjcY^-;Ipq_ z{Hu!3?!X>*-rZ)T-xHh~mP*^ld%H8`+wl+Q!rN07n^C|ich=p31ocWFdteF?L!NhM z%D3aGBdN+*LxC*QR*mKQK-vRifWaeD3CcQQs_fCNGI)mS!-5*O?sXz!u@x07cfYDG zCu)O;KJos{DddbEGb}M6aAcFQO;)&>z*oZE8t zv8ZMA?=L#IjiujA;=|b=b3$BnHj>O)fbG2*9JJYpSL?FA(t52`OS+uS9zUQ$p2m^G znevyd0|8q!-Q!+ zOHzNxJ;{pG`O2+|YH6rzP3oP9dF`47Z`tKkmM(deO__UH`K@ZZ9x1*t8Gg(p|9CcS zv>Ip#L>!^#SC$SBy6pHU$-qK-Cce$mFCh93tuEB*kD371i=12k1GlQ1alO`!_K}(G zqLB{n?$uAy_YTfE{$^?KR#1Mv;k2O@Uv<5?7%gP5MNih16cbO&;s?J6tD4w;FI7IXic`H*|qGuP8* z!TCapyLBd`?=!sKsuks)S-Lh$6G+Xp$_q?9caFhpH*ojr_2{#5U{DGS8UP)|SM&Nr zR)Wn(;*dk;>%iv9w?dzZM<6xcWf_Cr%AJnthOasGGNm><`5}>%_$=yr40#3O&%m_W oz6qlBiTPXqW=8z|gtglL2kTlMQDP6NJ^%m!07*qoM6N<$g5iyKc>n+a literal 0 HcmV?d00001 diff --git a/chapter03_fragment/app/src/main/res/layout/activity_main.xml b/chapter03_fragment/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..4fc2444 --- /dev/null +++ b/chapter03_fragment/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/res/layout/category_detail.xml b/chapter03_fragment/app/src/main/res/layout/category_detail.xml new file mode 100644 index 0000000..476b522 --- /dev/null +++ b/chapter03_fragment/app/src/main/res/layout/category_detail.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/res/layout/category_list_item.xml b/chapter03_fragment/app/src/main/res/layout/category_list_item.xml new file mode 100644 index 0000000..2187312 --- /dev/null +++ b/chapter03_fragment/app/src/main/res/layout/category_list_item.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/res/layout/categoty_detail_content.xml b/chapter03_fragment/app/src/main/res/layout/categoty_detail_content.xml new file mode 100644 index 0000000..a46be2c --- /dev/null +++ b/chapter03_fragment/app/src/main/res/layout/categoty_detail_content.xml @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/res/layout/content_category.xml b/chapter03_fragment/app/src/main/res/layout/content_category.xml new file mode 100644 index 0000000..440633f --- /dev/null +++ b/chapter03_fragment/app/src/main/res/layout/content_category.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/chapter03_fragment/app/src/main/res/layout/content_user.xml b/chapter03_fragment/app/src/main/res/layout/content_user.xml new file mode 100644 index 0000000..fa429d8 --- /dev/null +++ b/chapter03_fragment/app/src/main/res/layout/content_user.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +