Showing preview only (470K chars total). Download the full file or copy to clipboard to get everything.
Repository: yxs666/cniao5-shop
Branch: master
Commit: bf109ed7b97b
Files: 159
Total size: 414.8 KB
Directory structure:
gitextract_igovmuoh/
├── CNiao5Shop.iml
├── README.md
├── app/
│ ├── .gitignore
│ ├── app.iml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── cniao5/
│ │ └── com/
│ │ └── cniao5shop/
│ │ └── ApplicationTest.java
│ └── main/
│ ├── AndroidManifest.xml
│ ├── assets/
│ │ └── ShareSDK.xml
│ ├── java/
│ │ └── cniao5/
│ │ └── com/
│ │ └── cniao5shop/
│ │ ├── CniaoApplication.java
│ │ ├── Contants.java
│ │ ├── MainActivity.java
│ │ ├── WareDetailActivity.java
│ │ ├── WareListActivity.java
│ │ ├── adapter/
│ │ │ ├── BaseAdapter.java
│ │ │ ├── BaseViewHolder.java
│ │ │ ├── CartAdapter.java
│ │ │ ├── CategoryAdapter.java
│ │ │ ├── HWAdatper.java
│ │ │ ├── HomeCatgoryAdapter.java
│ │ │ ├── HotWaresAdapter.java
│ │ │ ├── SimpleAdapter.java
│ │ │ ├── WaresAdapter.java
│ │ │ └── decoration/
│ │ │ ├── CardViewtemDecortion.java
│ │ │ ├── DividerGridItemDecoration.java
│ │ │ └── DividerItemDecoration.java
│ │ ├── bean/
│ │ │ ├── Banner.java
│ │ │ ├── BaseBean.java
│ │ │ ├── Campaign.java
│ │ │ ├── Category.java
│ │ │ ├── HomeCampaign.java
│ │ │ ├── Page.java
│ │ │ ├── ShoppingCart.java
│ │ │ ├── Tab.java
│ │ │ └── Wares.java
│ │ ├── fragment/
│ │ │ ├── BaseFragment.java
│ │ │ ├── CartFragment.java
│ │ │ ├── CategoryFragment.java
│ │ │ ├── HomeFragment.java
│ │ │ ├── HotFragment.java
│ │ │ └── MineFragment.java
│ │ ├── http/
│ │ │ ├── BaseCallback.java
│ │ │ ├── OkHttpHelper.java
│ │ │ └── SpotsCallBack.java
│ │ ├── utils/
│ │ │ ├── CartProvider.java
│ │ │ ├── JSONUtil.java
│ │ │ ├── Pager.java
│ │ │ ├── PreferencesUtils.java
│ │ │ ├── TimeUtils.java
│ │ │ └── ToastUtils.java
│ │ └── widget/
│ │ ├── CNiaoToolBar.java
│ │ ├── FragmentTabHost.java
│ │ └── NumberAddSubView.java
│ └── res/
│ ├── color/
│ │ ├── grey_btn_text_color.xml
│ │ ├── selector_tab_text.xml
│ │ └── white_color_selector.xml
│ ├── drawable/
│ │ ├── bg_btn_style_green.xml
│ │ ├── bg_btn_style_grey.xml
│ │ ├── bg_btn_style_red.xml
│ │ ├── bg_btn_style_white.xml
│ │ ├── selector_checkbox.xml
│ │ ├── selector_icon_cart.xml
│ │ ├── selector_icon_category.xml
│ │ ├── selector_icon_home.xml
│ │ ├── selector_icon_hot.xml
│ │ ├── selector_icon_mine.xml
│ │ ├── selector_list_item.xml
│ │ ├── selector_number_add_sub.xml
│ │ └── selector_search_view.xml
│ ├── layout/
│ │ ├── activity_main.xml
│ │ ├── activity_test.xml
│ │ ├── activity_ware_detail.xml
│ │ ├── activity_warelist.xml
│ │ ├── fragment_cart.xml
│ │ ├── fragment_category.xml
│ │ ├── fragment_home.xml
│ │ ├── fragment_hot.xml
│ │ ├── fragment_mine.xml
│ │ ├── tab_indicator.xml
│ │ ├── template_cart.xml
│ │ ├── template_grid_wares.xml
│ │ ├── template_home_cardview.xml
│ │ ├── template_home_cardview2.xml
│ │ ├── template_hot_wares.xml
│ │ ├── template_single_text.xml
│ │ ├── toolbar.xml
│ │ └── widet_num_add_sub.xml
│ ├── menu/
│ │ └── menu_main.xml
│ ├── values/
│ │ ├── attr_number_add_sub_view.xml
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── ids.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-1280x768/
│ │ └── dimens.xml
│ └── values-w820dp/
│ └── dimens.xml
├── build/
│ └── intermediates/
│ └── dex-cache/
│ └── cache.xml
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── settings.gradle
└── sharesdk/
├── .gitignore
├── build.gradle
├── libs/
│ ├── MobCommons.jar
│ ├── MobTools.jar
│ ├── ShareSDK-Core-2.6.4.jar
│ ├── ShareSDK-QQ-2.6.4.jar
│ ├── ShareSDK-QZone-2.6.4.jar
│ ├── ShareSDK-SinaWeibo-2.6.4.jar
│ ├── ShareSDK-TencentWeibo-2.6.4.jar
│ ├── ShareSDK-Wechat-2.6.4.jar
│ ├── ShareSDK-Wechat-Core-2.6.4.jar
│ ├── ShareSDK-Wechat-Favorite-2.6.4.jar
│ └── ShareSDK-Wechat-Moments-2.6.4.jar
├── proguard-rules.pro
├── sharesdk.iml
└── src/
├── androidTest/
│ └── java/
│ └── cniao5/
│ └── com/
│ └── sharesdk/
│ └── ApplicationTest.java
└── main/
├── AndroidManifest.xml
├── java/
│ └── cn/
│ └── sharesdk/
│ └── onekeyshare/
│ ├── CustomerLogo.java
│ ├── EditPageFakeActivity.java
│ ├── FollowerListFakeActivity.java
│ ├── OnekeyShare.java
│ ├── OnekeyShareTheme.java
│ ├── PicViewer.java
│ ├── PlatformListFakeActivity.java
│ ├── ReflectableShareContentCustomizeCallback.java
│ ├── Shake2Share.java
│ ├── ShareContentCustomizeCallback.java
│ ├── ShareCore.java
│ ├── ThemeShareCallback.java
│ └── theme/
│ ├── classic/
│ │ ├── EditPage.java
│ │ ├── FollowListPage.java
│ │ ├── PlatformGridView.java
│ │ └── PlatformListPage.java
│ └── skyblue/
│ ├── EditPage.java
│ ├── FollowListPage.java
│ ├── PlatformGridViewAdapter.java
│ └── PlatformListPage.java
└── res/
├── drawable/
│ ├── ssdk_oks_classic_platform_corners_bg.xml
│ ├── ssdk_oks_skyblue_platform_list_item.xml
│ ├── ssdk_oks_skyblue_platform_list_item_selected.xml
│ └── ssdk_oks_skyblue_platform_list_selector.xml
├── drawable-xhdpi/
│ └── ssdk_oks_shake_to_share_back.xml
├── layout/
│ ├── ssdk_oks_skyblue_editpage.xml
│ ├── ssdk_oks_skyblue_editpage_at_layout.xml
│ ├── ssdk_oks_skyblue_editpage_inc_image_layout.xml
│ ├── ssdk_oks_skyblue_share_actionbar.xml
│ ├── ssdk_oks_skyblue_share_platform_list.xml
│ └── ssdk_oks_skyblue_share_platform_list_item.xml
├── values/
│ ├── ssdk_instapaper_strings.xml
│ ├── ssdk_oks_strings.xml
│ └── ssdk_strings.xml
└── values-en/
├── ssdk_oks_strings.xml
└── ssdk_strings.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: CNiao5Shop.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="CNiao5Shop" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
<option name="BUILDABLE" value="false" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
================================================
FILE: README.md
================================================
**h2声明:**<br/>
此源码是菜鸟窝企业项目课程[《菜鸟商城》](http://www.cniao5.com/clazz/view/10073.html)的源码
我花了1000+大洋学习此课程获取到的,我分享源码出来未来大家方便学习,所以源码只限于学习用途,如用作商业用途与本人无关
**交流QQ群:** 374899552
**下载:**<br/>
课程地址:[《菜鸟商城》](http://www.cniao5.com/clazz/view/10073.html)<br/>
视频下载地址:http://pan.baidu.com/s/1dExm8lr 密码:c93f
**【运行效果】**<br/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/13.order.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/14.pay_success.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/18.myorder.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/1.home.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/2.hot.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/3.category_all.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/4.cart.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/5.cart_del.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/6.list.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/7.list2.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/8.detail.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/9.detail_shared.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/10.login.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/11.login_next.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/15.login.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/10.login.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/16.addr_list.png" width="460" height="768"/>
<img src="https://github.com/yxs666/cniao5-shop/blob/master/screenshot/17.addr_add.png" width="460" height="768"/>
================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/app.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="CNiao5Shop" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":app" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
<afterSyncTasks>
<task>generateDebugAndroidTestSources</task>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/cardview-v7/23.0.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/23.0.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.0.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.cjj.materialrefeshlayout/library/1.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.daimajia.slider/library/1.1.5/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/drawee/0.6.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/fbcore/0.6.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/fresco/0.6.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/imagepipeline-okhttp/0.6.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/imagepipeline/0.6.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.github.d-max/spots-dialog/0.4/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.jiechic.library/xUtils/2.6.14/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/de.hdodenhof/circleimageview/2.0.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="fbcore-0.6.0" level="project" />
<orderEntry type="library" exported="" name="spots-dialog-0.4" level="project" />
<orderEntry type="library" exported="" name="circleimageview-2.0.0" level="project" />
<orderEntry type="library" exported="" name="drawee-0.6.0" level="project" />
<orderEntry type="library" exported="" name="picasso-2.5.2" level="project" />
<orderEntry type="library" exported="" name="library-1.3.0" level="project" />
<orderEntry type="library" exported="" name="support-v4-23.0.1" level="project" />
<orderEntry type="library" exported="" name="gson-2.3.1" level="project" />
<orderEntry type="library" exported="" name="cardview-v7-23.0.1" level="project" />
<orderEntry type="library" exported="" name="design-23.0.1" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-23.0.1" level="project" />
<orderEntry type="library" exported="" name="okhttp-2.5.0" level="project" />
<orderEntry type="library" exported="" name="okio-1.6.0" level="project" />
<orderEntry type="library" exported="" name="imagepipeline-0.6.0" level="project" />
<orderEntry type="library" exported="" name="fresco-0.6.0" level="project" />
<orderEntry type="library" exported="" name="xUtils-2.6.14" level="project" />
<orderEntry type="library" exported="" name="imagepipeline-okhttp-0.6.0" level="project" />
<orderEntry type="library" exported="" name="library-1.1.5" level="project" />
<orderEntry type="library" exported="" name="bolts-android-1.1.4" level="project" />
<orderEntry type="library" exported="" name="library-2.4.0" level="project" />
<orderEntry type="library" exported="" name="support-annotations-23.0.1" level="project" />
<orderEntry type="library" exported="" name="recyclerview-v7-23.0.1" level="project" />
<orderEntry type="module" module-name="sharesdk" exported="" />
</component>
</module>
================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "cniao5.com.cniao5shop"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:recyclerview-v7:23.0.1'
compile 'com.jiechic.library:xUtils:2.6.14'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.daimajia.slider:library:1.1.5@aar'
compile 'com.android.support:cardview-v7:23.0.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp:okhttp:2.5.0'
compile 'com.google.code.gson:gson:2.3.1'
compile 'com.github.d-max:spots-dialog:0.4@aar'
compile 'com.facebook.fresco:fresco:0.6.0+'
compile 'com.facebook.fresco:imagepipeline-okhttp:0.6.0+'
compile 'com.cjj.materialrefeshlayout:library:1.3.0'
compile 'com.android.support:design:23.0.1'
compile 'de.hdodenhof:circleimageview:2.0.0'
compile project(':sharesdk')
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/Ivan/soft/dev/android/android-sdk-macosx/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# 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 *;
#}
================================================
FILE: app/src/androidTest/java/cniao5/com/cniao5shop/ApplicationTest.java
================================================
package cniao5.com.cniao5shop;
import android.app.Application;
import android.test.ApplicationTestCase;
/**
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cniao5.com.cniao5shop" >
<!-- if you want to load images from the internet -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- if you want to load images from a file OR from the internet -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<!-- 蓝牙分享所需的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application
android:name=".CniaoApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- <activity android:name=".TestActvity"></activity> -->
<activity android:name=".WareListActivity" />
<activity
android:name=".WareDetailActivity"
android:label="@string/title_activity_ware_detail" >
</activity>
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" >
<intent-filter>
<data android:scheme="tencent100371282" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
================================================
FILE: app/src/main/assets/ShareSDK.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<DevInfor>
<!--
说明:
1、表格中的第一项
<ShareSDK
AppKey="api20" />
是必须的,其中的AppKey是您在ShareSDK上注册的开发者帐号的AppKey
2、所有集成到您项目的平台都应该为其在表格中填写相对应的开发者信息,以新浪微博为例:
<SinaWeibo
Id="1"
SortId="1"
AppKey="568898243"
AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"
RedirectUrl="http://www.mob.com"
Enable="true" />
其中的SortId是此平台在分享列表中的位置,由开发者自行定义,可以是任何整型数字,数值越大
越靠后AppKey、AppSecret和RedirectUrl是您在新浪微博上注册开发者信息和应用后得到的信息
Id是一个保留的识别符,整型,ShareSDK不使用此字段,供您在自己的项目中当作平台的识别符。
Enable字段表示此平台是否有效,布尔值,默认为true,如果Enable为false,即便平台的jar包
已经添加到应用中,平台实例依然不可获取。
各个平台注册应用信息的地址如下:
新浪微博 http://open.weibo.com
腾讯微博 http://dev.t.qq.com
QQ空间 http://connect.qq.com/intro/login/
微信好友 http://open.weixin.qq.com
Facebook https://developers.facebook.com
Twitter https://dev.twitter.com
人人网 http://dev.renren.com
开心网 http://open.kaixin001.com
搜狐微博 http://open.t.sohu.com
网易微博 http://open.t.163.com
豆瓣 http://developers.douban.com
有道云笔记 http://note.youdao.com/open/developguide.html#app
印象笔记 https://dev.evernote.com/
Linkedin https://developer.linkedin.com
FourSquare https://developer.foursquare.com/
搜狐随身看 https://open.sohu.com/
Flickr http://www.flickr.com/services/
Pinterest http://developers.pinterest.com/
Tumblr http://www.tumblr.com/developers
Dropbox https://www.dropbox.com/developers
Instagram http://instagram.com/developer#
VKontakte http://vk.com/dev
易信好友 http://open.yixin.im/
明道 http://open.mingdao.com/
Line http://media.line.me/zh-hant/
Pocket http://getpocket.com/developer/apps/new
-->
<ShareSDK
AppKey = "androidv1101"/> <!-- 修改成你在sharesdk后台注册的应用的appkey"-->
<!-- ShareByAppClient标识是否使用微博客户端分享,默认是false -->
<SinaWeibo
Id="1"
SortId="4"
AppKey="568898243"
AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"
RedirectUrl="http://www.sharesdk.cn"
ShareByAppClient="false"
Enable="true" />
<TencentWeibo
Id="2"
SortId="2"
AppKey="801307650"
AppSecret="ae36f4ee3946e1cbb98d6965b0b2ff5c"
RedirectUri="http://sharesdk.cn"
Enable="true" />
<!-- ShareByAppClient标识是否使用微博客户端分享,默认是false -->
<QZone
Id="3"
SortId="3"
AppId="100371282"
AppKey="aed9b0303e3ed1e27bae87c33761161d"
ShareByAppClient="false"
Enable="true" />
<!--
Wechat微信和WechatMoments微信朋友圈的appid是一样的;
注意:开发者不能用我们这两个平台的appid,否则分享不了
微信测试的时候,微信测试需要先签名打包出apk,
sample测试微信,要先签名打包,keystore在sample项目中,密码123456
BypassApproval是绕过审核的标记,设置为true后AppId将被忽略,故不经过
审核的应用也可以执行分享,但是仅限于分享文字和图片,不能分享其他类型,
默认值为false。此外,微信收藏不支持此字段。
-->
<Wechat
Id="4"
SortId="1"
AppId="wx4868b35061f87885"
AppSecret="64020361b8ec4c99936c0e3999a9f249"
BypassApproval="false"
Enable="true" />
<WechatMoments
Id="5"
SortId="5"
AppId="wx4868b35061f87885"
AppSecret="64020361b8ec4c99936c0e3999a9f249"
BypassApproval="false"
Enable="true" />
<WechatFavorite
Id="6"
SortId="6"
AppId="wx4868b35061f87885"
AppSecret="64020361b8ec4c99936c0e3999a9f249"
Enable="true" />
<!-- ShareByAppClient标识是否使用微博客户端分享,默认是false -->
<QQ
Id="7"
SortId="7"
AppId="100371282"
AppKey="aed9b0303e3ed1e27bae87c33761161d"
ShareByAppClient="true"
Enable="true" />
<Facebook
Id="8"
SortId="8"
ConsumerKey="107704292745179"
ConsumerSecret="38053202e1a5fe26c80c753071f0b573"
RedirectUrl="http://mob.com"
Enable="true" />
<Twitter
Id="9"
SortId="9"
ConsumerKey="LRBM0H75rWrU9gNHvlEAA2aOy"
ConsumerSecret="gbeWsZvA9ELJSdoBzJ5oLKX0TU09UOwrzdGfo9Tg7DjyGuMe8G"
CallbackUrl="http://mob.com"
Enable="true" />
<Renren
Id="10"
SortId="10"
AppId="226427"
ApiKey="fc5b8aed373c4c27a05b712acba0f8c3"
SecretKey="f29df781abdd4f49beca5a2194676ca4"
Enable="true" />
<KaiXin
Id="11"
SortId="11"
AppKey="358443394194887cee81ff5890870c7c"
AppSecret="da32179d859c016169f66d90b6db2a23"
RedirectUri="http://www.sharesdk.cn"
Enable="true" />
<Email
Id="12"
SortId="12"
Enable="true" />
<ShortMessage
Id="13"
SortId="13"
Enable="true" />
<Douban
Id="16"
SortId="16"
ApiKey="031a96a3aa8b28af094fc3eaffa17a0d"
Secret="2e675e730571b75d"
RedirectUri="http://mob.com"
Enable="true" />
<YouDao
Id="17"
SortId="17"
HostType="product"
ConsumerKey="dcde25dca105bcc36884ed4534dab940"
ConsumerSecret="d98217b4020e7f1874263795f44838fe"
RedirectUri="http://www.sharesdk.cn/"
Enable="true" />
<SohuSuishenkan
Id="18"
SortId="18"
AppKey="e16680a815134504b746c86e08a19db0"
AppSecret="b8eec53707c3976efc91614dd16ef81c"
RedirectUri="http://sharesdk.cn"
Enable="true" />
<!--
在中国大陆,印象笔记有两个服务器,一个是沙箱(sandbox),一个是生产服务器(china)。
一般你注册应用,它会先让你使用sandbox,当你完成测试以后,可以到
http://dev.yinxiang.com/support/上激活你的ConsumerKey,激活成功后,修改HostType
为china就好了。至于如果您申请的是国际版的印象笔记(Evernote),则其生产服务器类型为
“product”。
如果目标设备上已经安装了印象笔记客户端,ShareSDK允许应用调用本地API来完成分享,但
是需要将应用信息中的“ShareByAppClient”设置为true,此字段默认值为false。
-->
<Evernote
Id="19"
SortId="19"
HostType="sandbox"
ConsumerKey="sharesdk-7807"
ConsumerSecret="d05bf86993836004"
ShareByAppClient="false"
Enable="true" />
<LinkedIn
Id="20"
SortId="20"
ApiKey="ejo5ibkye3vo"
SecretKey="cC7B2jpxITqPLZ5M"
RedirectUrl="http://sharesdk.cn"
Enable="true" />
<GooglePlus
Id="21"
SortId="21"
Enable="true" />
<FourSquare
Id="22"
SortId="22"
ClientID="G0ZI20FM30SJAJTX2RIBGD05QV1NE2KVIM2SPXML2XUJNXEU"
ClientSecret="3XHQNSMMHIFBYOLWEPONNV4DOTCDBQH0AEMVGCBG0MZ32XNU"
RedirectUrl="http://www.sharesdk.cn"
Enable="true" />
<Pinterest
Id="23"
SortId="23"
ClientId="1432928"
Enable="true" />
<Flickr
Id="24"
SortId="24"
ApiKey="33d833ee6b6fca49943363282dd313dd"
ApiSecret="3a2c5b42a8fbb8bb"
RedirectUri="http://www.sharesdk.cn"
Enable="true" />
<Tumblr
Id="25"
SortId="25"
OAuthConsumerKey="2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM"
SecretKey="3Rt0sPFj7u2g39mEVB3IBpOzKnM3JnTtxX2bao2JKk4VV1gtNo"
CallbackUrl="http://sharesdk.cn"
Enable="true" />
<Dropbox
Id="26"
SortId="26"
AppKey="i5vw2mex1zcgjcj"
AppSecret="3i9xifsgb4omr0s"
RedirectUri="https://www.sharesdk.cn"
Enable="true" />
<VKontakte
Id="27"
SortId="27"
ApplicationId="3921561"
Enable="true" />
<Instagram
Id="28"
SortId="28"
ClientId="ff68e3216b4f4f989121aa1c2962d058"
ClientSecret="1b2e82f110264869b3505c3fe34e31a1"
RedirectUri="http://sharesdk.cn"
Enable="true" />
<!--
Yixin易信和YixinMoments易信朋友圈的appid是一样的;
注意:开发者不能用我们这两个平台的appid,否则分享不了
易信测试的时候需要先签名打包出apk,
sample测试易信,要先签名打包,keystore在sample项目中,密码123456
BypassApproval是绕过审核的标记,设置为true后AppId将被忽略,故不经过
审核的应用也可以执行分享,但是仅限于分享文字或图片,不能分享其他类型,
默认值为false。
-->
<Yixin
Id="29"
SortId="29"
AppId="yx0d9a9f9088ea44d78680f3274da1765f"
BypassApproval="true"
Enable="true" />
<YixinMoments
Id="30"
SortId="30"
AppId="yx0d9a9f9088ea44d78680f3274da1765f"
BypassApproval="true"
Enable="true" />
<Mingdao
Id="31"
SortId="31"
AppKey="EEEE9578D1D431D3215D8C21BF5357E3"
AppSecret="5EDE59F37B3EFA8F65EEFB9976A4E933"
RedirectUri="http://sharesdk.cn"
Enable="true" />
<Line
Id="32"
SortId="32"
Enable="true" />
<KakaoTalk
Id="33"
SortId="33"
AppKey="48d3f524e4a636b08d81b3ceb50f1003"
Enable="true" />
<KakaoStory
Id="34"
SortId="34"
AppKey="48d3f524e4a636b08d81b3ceb50f1003"
Enable="true" />
<WhatsApp
Id="35"
SortId="35"
Enable="true" />
<Bluetooth
Id="36"
SortId="36"
Enable="false" />
<Pocket
Id="37"
SortId="37"
ConsumerKey="32741-389c565043c49947ba7edf05"
Enable="true" />
<Instapaper
Id="38"
SortId="38"
ConsumerKey="4rDJORmcOcSAZL1YpqGHRI605xUvrLbOhkJ07yO0wWrYrc61FA"
ConsumerSecret="GNr1GespOQbrm8nvd7rlUsyRQsIo3boIbMguAl9gfpdL0aKZWe"
Enable="true" />
<FacebookMessenger
Id="39"
SortId="39"
ConsumerKey="107704292745179"
ConsumerSecret="38053202e1a5fe26c80c753071f0b573"
RedirectUrl="http://mob.com"
Enable="true" />
<Alipay
Id="52"
SortId="52"
AppId="2015072400185895"
Enable="true"/>
</DevInfor>
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/CniaoApplication.java
================================================
package cniao5.com.cniao5shop;
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class CniaoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/Contants.java
================================================
package cniao5.com.cniao5shop;
public class Contants {
public static final String COMPAINGAIN_ID="compaigin_id";
public static final String WARE="ware";
public static class API{
public static final String BASE_URL="http://112.124.22.238:8081/course_api/";
public static final String CAMPAIGN_HOME=BASE_URL + "campaign/recommend";
public static final String BANNER=BASE_URL +"banner/query";
public static final String WARES_HOT=BASE_URL + "wares/hot";
public static final String WARES_LIST=BASE_URL +"wares/list";
public static final String WARES_CAMPAIN_LIST=BASE_URL +"wares/campaign/list";
public static final String WARES_DETAIL=BASE_URL +"wares/detail.html";
public static final String CATEGORY_LIST=BASE_URL +"category/list";
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/MainActivity.java
================================================
package cniao5.com.cniao5shop;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import cniao5.com.cniao5shop.bean.Tab;
import cniao5.com.cniao5shop.fragment.CartFragment;
import cniao5.com.cniao5shop.fragment.CategoryFragment;
import cniao5.com.cniao5shop.fragment.HomeFragment;
import cniao5.com.cniao5shop.fragment.HotFragment;
import cniao5.com.cniao5shop.fragment.MineFragment;
import cniao5.com.cniao5shop.widget.FragmentTabHost;
public class MainActivity extends AppCompatActivity {
private LayoutInflater mInflater;
private FragmentTabHost mTabhost;
private CartFragment cartFragment;
private List<Tab> mTabs = new ArrayList<>(5);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTab();
}
private void initTab() {
Tab tab_home = new Tab(HomeFragment.class,R.string.home,R.drawable.selector_icon_home);
Tab tab_hot = new Tab(HotFragment.class,R.string.hot,R.drawable.selector_icon_hot);
Tab tab_category = new Tab(CategoryFragment.class,R.string.catagory,R.drawable.selector_icon_category);
Tab tab_cart = new Tab(CartFragment.class,R.string.cart,R.drawable.selector_icon_cart);
Tab tab_mine = new Tab(MineFragment.class,R.string.mine,R.drawable.selector_icon_mine);
mTabs.add(tab_home);
mTabs.add(tab_hot);
mTabs.add(tab_category);
mTabs.add(tab_cart);
mTabs.add(tab_mine);
mInflater = LayoutInflater.from(this);
mTabhost = (FragmentTabHost) this.findViewById(android.R.id.tabhost);
mTabhost.setup(this,getSupportFragmentManager(),R.id.realtabcontent);
for (Tab tab : mTabs){
TabHost.TabSpec tabSpec = mTabhost.newTabSpec(getString(tab.getTitle()));
tabSpec.setIndicator(buildIndicator(tab));
mTabhost.addTab(tabSpec,tab.getFragment(),null);
}
mTabhost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
if(tabId==getString(R.string.cart)){
refData();
}
}
});
mTabhost.getTabWidget().setShowDividers(LinearLayout.SHOW_DIVIDER_NONE);
mTabhost.setCurrentTab(0);
}
private void refData(){
if(cartFragment == null){
Fragment fragment = getSupportFragmentManager().findFragmentByTag(getString(R.string.cart));
if(fragment !=null){
cartFragment= (CartFragment) fragment;
cartFragment.refData();
}
}
else{
cartFragment.refData();
}
}
private View buildIndicator(Tab tab){
View view =mInflater.inflate(R.layout.tab_indicator,null);
ImageView img = (ImageView) view.findViewById(R.id.icon_tab);
TextView text = (TextView) view.findViewById(R.id.txt_indicator);
img.setBackgroundResource(tab.getIcon());
text.setText(tab.getTitle());
return view;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/WareDetailActivity.java
================================================
package cniao5.com.cniao5shop;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import java.io.Serializable;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cniao5.com.cniao5shop.bean.Wares;
import cniao5.com.cniao5shop.utils.CartProvider;
import cniao5.com.cniao5shop.utils.ToastUtils;
import cniao5.com.cniao5shop.widget.CNiaoToolBar;
import dmax.dialog.SpotsDialog;
public class WareDetailActivity extends AppCompatActivity implements View.OnClickListener {
@ViewInject(R.id.webView)
private WebView mWebView;
@ViewInject(R.id.toolbar)
private CNiaoToolBar mToolBar;
private Wares mWare;
private WebAppInterface mAppInterfce;
private CartProvider cartProvider;
private SpotsDialog mDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ware_detail);
ViewUtils.inject(this);
Serializable serializable = getIntent().getSerializableExtra(Contants.WARE);
if(serializable ==null)
this.finish();
mDialog = new SpotsDialog(this,"loading....");
mDialog.show();
mWare = (Wares) serializable;
cartProvider = new CartProvider(this);
initToolBar();
initWebView();
}
private void initWebView(){
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBlockNetworkImage(false);
settings.setAppCacheEnabled(true);
mWebView.loadUrl(Contants.API.WARES_DETAIL);
mAppInterfce = new WebAppInterface(this);
mWebView.addJavascriptInterface(mAppInterfce,"appInterface");
mWebView.setWebViewClient(new WC());
}
private void initToolBar(){
mToolBar.setNavigationOnClickListener(this);
mToolBar.setRightButtonText("分享");
mToolBar.setRightButtonOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showShare();
}
});
}
private void showShare() {
ShareSDK.initSDK(this);
OnekeyShare oks = new OnekeyShare();
//关闭sso授权
oks.disableSSOWhenAuthorize();
// 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法
//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.setTitle(getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.setTitleUrl("http://www.cniao5.com");
// text是分享文本,所有平台都需要这个字段
oks.setText(mWare.getName());
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
// oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
oks.setImageUrl(mWare.getImgUrl());
// url仅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://www.cniao5.com");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.setComment(mWare.getName());
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.setSiteUrl("http://www.cniao5.com");
// 启动分享GUI
oks.show(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ShareSDK.stopSDK(this);
}
@Override
public void onClick(View v) {
this.finish();
}
class WC extends WebViewClient{
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if(mDialog !=null && mDialog.isShowing())
mDialog.dismiss();
mAppInterfce.showDetail();
}
}
class WebAppInterface{
private Context mContext;
public WebAppInterface(Context context){
mContext = context;
}
@JavascriptInterface
public void showDetail(){
runOnUiThread(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:showDetail("+mWare.getId()+")");
}
});
}
@JavascriptInterface
public void buy(long id){
cartProvider.put(mWare);
ToastUtils.show(mContext,"已添加到购物车");
}
@JavascriptInterface
public void addFavorites(long id){
}
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/WareListActivity.java
================================================
package cniao5.com.cniao5shop;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.cjj.MaterialRefreshLayout;
import com.google.gson.reflect.TypeToken;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import java.util.List;
import cniao5.com.cniao5shop.adapter.BaseAdapter;
import cniao5.com.cniao5shop.adapter.HWAdatper;
import cniao5.com.cniao5shop.adapter.decoration.DividerItemDecoration;
import cniao5.com.cniao5shop.bean.Page;
import cniao5.com.cniao5shop.bean.Wares;
import cniao5.com.cniao5shop.utils.Pager;
import cniao5.com.cniao5shop.widget.CNiaoToolBar;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class WareListActivity extends AppCompatActivity implements Pager.OnPageListener<Wares>,TabLayout.OnTabSelectedListener,View.OnClickListener {
private static final String TAG = "WareListActivity";
public static final int TAG_DEFAULT=0;
public static final int TAG_SALE=1;
public static final int TAG_PRICE=2;
public static final int ACTION_LIST=1;
public static final int ACTION_GIRD=2;
@ViewInject(R.id.tab_layout)
private TabLayout mTablayout;
@ViewInject(R.id.txt_summary)
private TextView mTxtSummary;
@ViewInject(R.id.recycler_view)
private RecyclerView mRecyclerview_wares;
@ViewInject(R.id.refresh_layout)
private MaterialRefreshLayout mRefreshLayout;
@ViewInject(R.id.toolbar)
private CNiaoToolBar mToolbar;
private int orderBy = 0;
private long campaignId = 0;
private HWAdatper mWaresAdapter;
private Pager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_warelist);
ViewUtils.inject(this);
initToolBar();
campaignId=getIntent().getLongExtra(Contants.COMPAINGAIN_ID,0);
initTab();
getData();
}
private void initToolBar(){
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
WareListActivity.this.finish();
}
});
mToolbar.setRightButtonIcon(R.drawable.icon_grid_32);
mToolbar.getRightButton().setTag(ACTION_LIST);
mToolbar.setRightButtonOnClickListener(this);
}
private void getData(){
pager= Pager.newBuilder().setUrl(Contants.API.WARES_CAMPAIN_LIST)
.putParam("campaignId",campaignId)
.putParam("orderBy",orderBy)
.setRefreshLayout(mRefreshLayout)
.setLoadMore(true)
.setOnPageListener(this)
.build(this,new TypeToken<Page<Wares>>(){}.getType());
pager.request();
}
private void initTab(){
TabLayout.Tab tab= mTablayout.newTab();
tab.setText("默认");
tab.setTag(TAG_DEFAULT);
mTablayout.addTab(tab);
tab= mTablayout.newTab();
tab.setText("价格");
tab.setTag(TAG_PRICE);
mTablayout.addTab(tab);
tab= mTablayout.newTab();
tab.setText("销量");
tab.setTag(TAG_SALE);
mTablayout.addTab(tab);
mTablayout.setOnTabSelectedListener(this);
}
@Override
public void load(List<Wares> datas, int totalPage, int totalCount) {
mTxtSummary.setText("共有"+totalCount+"件商品");
if (mWaresAdapter == null) {
mWaresAdapter = new HWAdatper(this, datas);
mWaresAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Wares wares = mWaresAdapter.getItem(position);
Intent intent = new Intent(WareListActivity.this, WareDetailActivity.class);
intent.putExtra(Contants.WARE,wares);
startActivity(intent);
}
});
mRecyclerview_wares.setAdapter(mWaresAdapter);
mRecyclerview_wares.setLayoutManager(new LinearLayoutManager(this));
mRecyclerview_wares.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));
mRecyclerview_wares.setItemAnimator(new DefaultItemAnimator());
} else {
mWaresAdapter.refreshData(datas);
}
}
@Override
public void refresh(List<Wares> datas, int totalPage, int totalCount) {
mWaresAdapter.refreshData(datas);
mRecyclerview_wares.scrollToPosition(0);
}
@Override
public void loadMore(List<Wares> datas, int totalPage, int totalCount) {
mWaresAdapter.loadMoreData(datas);
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
orderBy = (int) tab.getTag();
pager.putParam("orderBy",orderBy);
pager.request();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
@Override
public void onClick(View v) {
int action = (int) v.getTag();
if(ACTION_LIST == action){
mToolbar.setRightButtonIcon(R.drawable.icon_list_32);
mToolbar.getRightButton().setTag(ACTION_GIRD);
mWaresAdapter.resetLayout(R.layout.template_grid_wares);
mRecyclerview_wares.setLayoutManager(new GridLayoutManager(this,2));
}
else if(ACTION_GIRD == action){
mToolbar.setRightButtonIcon(R.drawable.icon_grid_32);
mToolbar.getRightButton().setTag(ACTION_LIST);
mWaresAdapter.resetLayout(R.layout.template_hot_wares);
mRecyclerview_wares.setLayoutManager(new LinearLayoutManager(this));
}
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/BaseAdapter.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public abstract class BaseAdapter<T,H extends BaseViewHolder> extends RecyclerView.Adapter<BaseViewHolder>{
protected static final String TAG = BaseAdapter.class.getSimpleName();
protected final Context context;
protected int layoutResId;
protected List<T> datas;
private OnItemClickListener mOnItemClickListener = null;
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
public BaseAdapter(Context context, int layoutResId) {
this(context, layoutResId, null);
}
public BaseAdapter(Context context, int layoutResId, List<T> datas) {
this.datas = datas == null ? new ArrayList<T>() : datas;
this.context = context;
this.layoutResId = layoutResId;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(layoutResId, viewGroup, false);
BaseViewHolder vh = new BaseViewHolder(view,mOnItemClickListener);
return vh;
}
@Override
public void onBindViewHolder(BaseViewHolder viewHoder, int position) {
T item = getItem(position);
convert((H)viewHoder, item);
}
@Override
public int getItemCount() {
if(datas==null || datas.size()<=0)
return 0;
return datas.size();
}
public T getItem(int position) {
if (position >= datas.size()) return null;
return datas.get(position);
}
public void clear(){
// int itemCount = datas.size();
// datas.clear();
// this.notifyItemRangeRemoved(0,itemCount);
for (Iterator it=datas.iterator();it.hasNext();){
T t = (T) it.next();
int position = datas.indexOf(t);
it.remove();
notifyItemRemoved(position);
}
}
/**
* 从列表中删除某项
* @param t
*/
public void removeItem(T t){
int position = datas.indexOf(t);
datas.remove(position);
notifyItemRemoved(position);
}
public List<T> getDatas(){
return datas;
}
public void addData(List<T> datas){
addData(0,datas);
}
public void addData(int position,List<T> list){
if(list !=null && list.size()>0) {
for (T t:list) {
datas.add(position, t);
notifyItemInserted(position);
}
}
}
public void refreshData(List<T> list){
if(list !=null && list.size()>0){
clear();
int size = list.size();
for (int i=0;i<size;i++){
datas.add(i,list.get(i));
notifyItemInserted(i);
}
}
}
public void loadMoreData(List<T> list){
if(list !=null && list.size()>0){
int size = list.size();
int begin = datas.size();
for (int i=0;i<size;i++){
datas.add(list.get(i));
notifyItemInserted(i+begin);
}
}
}
/**
* Implement this method and use the helper to adapt the view to the given item.
* @param viewHoder A fully initialized helper.
* @param item The item that needs to be displayed.
*/
protected abstract void convert(H viewHoder, T item);
public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/BaseViewHolder.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private SparseArray<View> views;
private BaseAdapter.OnItemClickListener mOnItemClickListener ;
public BaseViewHolder(View itemView,BaseAdapter.OnItemClickListener onItemClickListener){
super(itemView);
itemView.setOnClickListener(this);
this.mOnItemClickListener =onItemClickListener;
this.views = new SparseArray<View>();
}
public TextView getTextView(int viewId) {
return retrieveView(viewId);
}
public Button getButton(int viewId) {
return retrieveView(viewId);
}
public ImageView getImageView(int viewId) {
return retrieveView(viewId);
}
public View getView(int viewId) {
return retrieveView(viewId);
}
protected <T extends View> T retrieveView(int viewId) {
View view = views.get(viewId);
if (view == null) {
view = itemView.findViewById(viewId);
views.put(viewId, view);
}
return (T) view;
}
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(v,getLayoutPosition());
}
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/CartAdapter.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.content.Context;
import android.net.Uri;
import android.text.Html;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.Iterator;
import java.util.List;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.bean.ShoppingCart;
import cniao5.com.cniao5shop.utils.CartProvider;
import cniao5.com.cniao5shop.widget.NumberAddSubView;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class CartAdapter extends SimpleAdapter<ShoppingCart> implements BaseAdapter.OnItemClickListener {
public static final String TAG="CartAdapter";
private CheckBox checkBox;
private TextView textView;
private CartProvider cartProvider;
public CartAdapter(Context context, List<ShoppingCart> datas, final CheckBox checkBox,TextView tv) {
super(context, R.layout.template_cart, datas);
setCheckBox(checkBox);
setTextView(tv);
cartProvider = new CartProvider(context);
setOnItemClickListener(this);
showTotalPrice();
}
@Override
protected void convert(BaseViewHolder viewHoder, final ShoppingCart item) {
viewHoder.getTextView(R.id.text_title).setText(item.getName());
viewHoder.getTextView(R.id.text_price).setText("¥"+item.getPrice());
SimpleDraweeView draweeView = (SimpleDraweeView) viewHoder.getView(R.id.drawee_view);
draweeView.setImageURI(Uri.parse(item.getImgUrl()));
CheckBox checkBox = (CheckBox) viewHoder.getView(R.id.checkbox);
checkBox.setChecked(item.isChecked());
NumberAddSubView numberAddSubView = (NumberAddSubView) viewHoder.getView(R.id.num_control);
numberAddSubView.setValue(item.getCount());
numberAddSubView.setOnButtonClickListener(new NumberAddSubView.OnButtonClickListener() {
@Override
public void onButtonAddClick(View view, int value) {
item.setCount(value);
cartProvider.update(item);
showTotalPrice();
}
@Override
public void onButtonSubClick(View view, int value) {
item.setCount(value);
cartProvider.update(item);
showTotalPrice();
}
});
}
private float getTotalPrice(){
float sum=0;
if(!isNull())
return sum;
for (ShoppingCart cart:
datas) {
if(cart.isChecked())
sum += cart.getCount()*cart.getPrice();
}
return sum;
}
public void showTotalPrice(){
float total = getTotalPrice();
textView.setText(Html.fromHtml("合计 ¥<span style='color:#eb4f38'>" + total + "</span>"), TextView.BufferType.SPANNABLE);
}
private boolean isNull(){
return (datas !=null && datas.size()>0);
}
@Override
public void onItemClick(View view, int position) {
ShoppingCart cart = getItem(position);
cart.setIsChecked(!cart.isChecked());
notifyItemChanged(position);
checkListen();
showTotalPrice();
}
private void checkListen() {
int count = 0;
int checkNum = 0;
if (datas != null) {
count = datas.size();
for (ShoppingCart cart : datas) {
if (!cart.isChecked()) {
checkBox.setChecked(false);
break;
} else {
checkNum = checkNum + 1;
}
}
if (count == checkNum) {
checkBox.setChecked(true);
}
}
}
public void checkAll_None(boolean isChecked){
if(!isNull())
return ;
int i=0;
for (ShoppingCart cart :datas){
cart.setIsChecked(isChecked);
notifyItemChanged(i);
i++;
}
}
public void delCart(){
if(!isNull())
return ;
// for (ShoppingCart cart : datas){
//
// if(cart.isChecked()){
// int position = datas.indexOf(cart);
// cartProvider.delete(cart);
// datas.remove(cart);
// notifyItemRemoved(position);
// }
// }
for(Iterator iterator = datas.iterator();iterator.hasNext();){
ShoppingCart cart = (ShoppingCart) iterator.next();
if(cart.isChecked()){
int position = datas.indexOf(cart);
cartProvider.delete(cart);
iterator.remove();
notifyItemRemoved(position);
}
}
}
public void setTextView(TextView textview){
this.textView = textview;
}
public void setCheckBox(CheckBox ck){
this.checkBox = ck;
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkAll_None(checkBox.isChecked());
showTotalPrice();
}
});
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/CategoryAdapter.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.content.Context;
import java.util.List;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.bean.Category;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class CategoryAdapter extends SimpleAdapter<Category> {
public CategoryAdapter(Context context, List<Category> datas) {
super(context, R.layout.template_single_text, datas);
}
@Override
protected void convert(BaseViewHolder viewHoder, Category item) {
viewHoder.getTextView(R.id.textView).setText(item.getName());
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/HWAdatper.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.content.Context;
import android.net.Uri;
import android.view.View;
import android.widget.Button;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.bean.Wares;
import cniao5.com.cniao5shop.utils.CartProvider;
import cniao5.com.cniao5shop.utils.ToastUtils;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class HWAdatper extends SimpleAdapter<Wares> {
CartProvider provider ;
public HWAdatper(Context context, List<Wares> datas) {
super(context, R.layout.template_hot_wares, datas);
provider = new CartProvider(context);
}
@Override
protected void convert(BaseViewHolder viewHolder, final Wares wares) {
SimpleDraweeView draweeView = (SimpleDraweeView) viewHolder.getView(R.id.drawee_view);
draweeView.setImageURI(Uri.parse(wares.getImgUrl()));
viewHolder.getTextView(R.id.text_title).setText(wares.getName());
viewHolder.getTextView(R.id.text_price).setText("¥ "+wares.getPrice());
Button button =viewHolder.getButton(R.id.btn_add);
if(button !=null) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
provider.put(wares);
ToastUtils.show(context, "已添加到购物车");
}
});
}
}
public void resetLayout(int layoutId){
this.layoutResId = layoutId;
notifyItemRangeChanged(0,getDatas().size());
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/HomeCatgoryAdapter.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.List;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.bean.Campaign;
import cniao5.com.cniao5shop.bean.HomeCampaign;
/**
* Created by Ivan on 15/9/30.
*/
public class HomeCatgoryAdapter extends RecyclerView.Adapter<HomeCatgoryAdapter.ViewHolder> {
private static int VIEW_TYPE_L=0;
private static int VIEW_TYPE_R=1;
private LayoutInflater mInflater;
private List<HomeCampaign> mDatas;
private Context mContext;
private OnCampaignClickListener mListener;
public HomeCatgoryAdapter(List<HomeCampaign> datas,Context context){
mDatas = datas;
this.mContext = context;
}
public void setOnCampaignClickListener(OnCampaignClickListener listener){
this.mListener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) {
mInflater = LayoutInflater.from(viewGroup.getContext());
if(type == VIEW_TYPE_R){
return new ViewHolder(mInflater.inflate(R.layout.template_home_cardview2,viewGroup,false));
}
return new ViewHolder(mInflater.inflate(R.layout.template_home_cardview,viewGroup,false));
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
HomeCampaign homeCampaign = mDatas.get(i);
viewHolder.textTitle.setText(homeCampaign.getTitle());
Picasso.with(mContext).load(homeCampaign.getCpOne().getImgUrl()).into(viewHolder.imageViewBig);
Picasso.with(mContext).load(homeCampaign.getCpTwo().getImgUrl()).into(viewHolder.imageViewSmallTop);
Picasso.with(mContext).load(homeCampaign.getCpThree().getImgUrl()).into(viewHolder.imageViewSmallBottom);
}
@Override
public int getItemCount() {
return mDatas.size();
}
@Override
public int getItemViewType(int position) {
if(position % 2==0){
return VIEW_TYPE_R;
}
else return VIEW_TYPE_L;
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView textTitle;
ImageView imageViewBig;
ImageView imageViewSmallTop;
ImageView imageViewSmallBottom;
public ViewHolder(View itemView) {
super(itemView);
textTitle = (TextView) itemView.findViewById(R.id.text_title);
imageViewBig = (ImageView) itemView.findViewById(R.id.imgview_big);
imageViewSmallTop = (ImageView) itemView.findViewById(R.id.imgview_small_top);
imageViewSmallBottom = (ImageView) itemView.findViewById(R.id.imgview_small_bottom);
imageViewBig.setOnClickListener(this);
imageViewSmallTop.setOnClickListener(this);
imageViewSmallBottom.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(mListener !=null){
anim(v);
}
}
private void anim(final View v){
ObjectAnimator animator = ObjectAnimator.ofFloat(v, "rotationX", 0.0F, 360.0F)
.setDuration(200);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
HomeCampaign campaign = mDatas.get(getLayoutPosition());
switch (v.getId()){
case R.id.imgview_big:
mListener.onClick(v, campaign.getCpOne());
break;
case R.id.imgview_small_top:
mListener.onClick(v, campaign.getCpTwo());
break;
case R.id.imgview_small_bottom:
mListener.onClick(v,campaign.getCpThree());
break;
}
}
});
animator.start();
}
}
public interface OnCampaignClickListener{
void onClick(View view,Campaign campaign);
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/HotWaresAdapter.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.bean.Wares;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class HotWaresAdapter extends RecyclerView.Adapter<HotWaresAdapter.ViewHolder> {
private List<Wares> mDatas;
private LayoutInflater mInflater;
public HotWaresAdapter(List<Wares> wares){
mDatas = wares;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
mInflater = LayoutInflater.from(parent.getContext());
View view = mInflater.inflate(R.layout.template_hot_wares,null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Wares wares = getData(position);
holder.draweeView.setImageURI(Uri.parse(wares.getImgUrl()));
holder.textTitle.setText(wares.getName());
holder.textPrice.setText("¥"+wares.getPrice());
}
public Wares getData(int position){
return mDatas.get(position);
}
public List<Wares> getDatas(){
return mDatas;
}
public void clearData(){
mDatas.clear();
notifyItemRangeRemoved(0,mDatas.size());
}
public void addData(List<Wares> datas){
addData(0,datas);
}
public void addData(int position,List<Wares> datas){
if(datas !=null && datas.size()>0) {
mDatas.addAll(datas);
notifyItemRangeChanged(position, mDatas.size());
}
}
@Override
public int getItemCount() {
if(mDatas!=null && mDatas.size()>0)
return mDatas.size();
return 0;
}
class ViewHolder extends RecyclerView.ViewHolder{
SimpleDraweeView draweeView;
TextView textTitle;
TextView textPrice;
public ViewHolder(View itemView) {
super(itemView);
draweeView = (SimpleDraweeView) itemView.findViewById(R.id.drawee_view);
textTitle= (TextView) itemView.findViewById(R.id.text_title);
textPrice= (TextView) itemView.findViewById(R.id.text_price);
}
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/SimpleAdapter.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.content.Context;
import java.util.List;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public abstract class SimpleAdapter<T> extends BaseAdapter<T,BaseViewHolder> {
public SimpleAdapter(Context context, int layoutResId) {
super(context, layoutResId);
}
public SimpleAdapter(Context context, int layoutResId, List<T> datas) {
super(context, layoutResId, datas);
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/WaresAdapter.java
================================================
package cniao5.com.cniao5shop.adapter;
import android.content.Context;
import android.net.Uri;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.bean.Wares;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class WaresAdapter extends SimpleAdapter<Wares> {
public WaresAdapter(Context context, List<Wares> datas) {
super(context, R.layout.template_grid_wares, datas);
}
@Override
protected void convert(BaseViewHolder viewHoder, Wares item) {
viewHoder.getTextView(R.id.text_title).setText(item.getName());
viewHoder.getTextView(R.id.text_price).setText("¥"+item.getPrice());
SimpleDraweeView draweeView = (SimpleDraweeView) viewHoder.getView(R.id.drawee_view);
draweeView.setImageURI(Uri.parse(item.getImgUrl()));
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/CardViewtemDecortion.java
================================================
package cniao5.com.cniao5shop.adapter.decoration;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class CardViewtemDecortion extends RecyclerView.ItemDecoration {
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDrawOver(c, parent, state);
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int layoutOrientation = getOrientation(parent);
if (layoutOrientation == LinearLayoutManager.VERTICAL) {
outRect.top = 10;
outRect.left=5;
outRect.right=5;
} else if(layoutOrientation == LinearLayoutManager.HORIZONTAL) {
outRect.left = 5;
}
}
private int getOrientation(RecyclerView parent) {
if (parent.getLayoutManager() instanceof LinearLayoutManager) {
LinearLayoutManager layoutManager = (LinearLayoutManager) parent.getLayoutManager();
return layoutManager.getOrientation();
} else throw new IllegalStateException("DividerItemDecoration can only be used with a LinearLayoutManager.");
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/DividerGridItemDecoration.java
================================================
package cniao5.com.cniao5shop.adapter.decoration;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.LayoutManager;
import android.support.v7.widget.RecyclerView.State;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
/**
*
* @author zhy
*
*/
public class DividerGridItemDecoration extends RecyclerView.ItemDecoration
{
private static final int[] ATTRS = new int[] { android.R.attr.listDivider };
private Drawable mDivider;
public DividerGridItemDecoration(Context context)
{
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable(0);
a.recycle();
}
@Override
public void onDraw(Canvas c, RecyclerView parent, State state)
{
drawHorizontal(c, parent);
drawVertical(c, parent);
}
private int getSpanCount(RecyclerView parent)
{
// 列数
int spanCount = -1;
LayoutManager layoutManager = parent.getLayoutManager();
if (layoutManager instanceof GridLayoutManager)
{
spanCount = ((GridLayoutManager) layoutManager).getSpanCount();
} else if (layoutManager instanceof StaggeredGridLayoutManager)
{
spanCount = ((StaggeredGridLayoutManager) layoutManager)
.getSpanCount();
}
return spanCount;
}
public void drawHorizontal(Canvas c, RecyclerView parent)
{
int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++)
{
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int left = child.getLeft() - params.leftMargin;
final int right = child.getRight() + params.rightMargin
+ mDivider.getIntrinsicWidth();
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
public void drawVertical(Canvas c, RecyclerView parent)
{
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++)
{
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int top = child.getTop() - params.topMargin;
final int bottom = child.getBottom() + params.bottomMargin;
final int left = child.getRight() + params.rightMargin;
final int right = left + mDivider.getIntrinsicWidth();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
private boolean isLastColum(RecyclerView parent, int pos, int spanCount,
int childCount)
{
LayoutManager layoutManager = parent.getLayoutManager();
if (layoutManager instanceof GridLayoutManager)
{
if ((pos + 1) % spanCount == 0)// 如果是最后一列,则不需要绘制右边
{
return true;
}
} else if (layoutManager instanceof StaggeredGridLayoutManager)
{
int orientation = ((StaggeredGridLayoutManager) layoutManager)
.getOrientation();
if (orientation == StaggeredGridLayoutManager.VERTICAL)
{
if ((pos + 1) % spanCount == 0)// 如果是最后一列,则不需要绘制右边
{
return true;
}
} else
{
childCount = childCount - childCount % spanCount;
if (pos >= childCount)// 如果是最后一列,则不需要绘制右边
return true;
}
}
return false;
}
private boolean isLastRaw(RecyclerView parent, int pos, int spanCount,
int childCount)
{
LayoutManager layoutManager = parent.getLayoutManager();
if (layoutManager instanceof GridLayoutManager)
{
childCount = childCount - childCount % spanCount;
if (pos >= childCount)// 如果是最后一行,则不需要绘制底部
return true;
} else if (layoutManager instanceof StaggeredGridLayoutManager)
{
int orientation = ((StaggeredGridLayoutManager) layoutManager)
.getOrientation();
// StaggeredGridLayoutManager 且纵向滚动
if (orientation == StaggeredGridLayoutManager.VERTICAL)
{
childCount = childCount - childCount % spanCount;
// 如果是最后一行,则不需要绘制底部
if (pos >= childCount)
return true;
} else
// StaggeredGridLayoutManager 且横向滚动
{
// 如果是最后一行,则不需要绘制底部
if ((pos + 1) % spanCount == 0)
{
return true;
}
}
}
return false;
}
@Override
public void getItemOffsets(Rect outRect, int itemPosition,
RecyclerView parent)
{
int spanCount = getSpanCount(parent);
int childCount = parent.getAdapter().getItemCount();
if (isLastRaw(parent, itemPosition, spanCount, childCount))// 如果是最后一行,则不需要绘制底部
{
outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
} else if (isLastColum(parent, itemPosition, spanCount, childCount))// 如果是最后一列,则不需要绘制右边
{
outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
} else
{
outRect.set(0, 0, mDivider.getIntrinsicWidth(),
mDivider.getIntrinsicHeight());
}
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/DividerItemDecoration.java
================================================
package cniao5.com.cniao5shop.adapter.decoration;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private static final int[] ATTRS = new int[]{
android.R.attr.listDivider
};
public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
private Drawable mDivider;
private int mOrientation;
public DividerItemDecoration(Context context, int orientation) {
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable(0);
a.recycle();
setOrientation(orientation);
}
public void setOrientation(int orientation) {
if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
throw new IllegalArgumentException("invalid orientation");
}
mOrientation = orientation;
}
@Override
public void onDraw(Canvas c, RecyclerView parent) {
// Log.v("recyclerview - itemdecoration", "onDraw()");
if (mOrientation == VERTICAL_LIST) {
drawVertical(c, parent);
} else {
drawHorizontal(c, parent);
}
}
public void drawVertical(Canvas c, RecyclerView parent) {
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
public void drawHorizontal(Canvas c, RecyclerView parent) {
final int top = parent.getPaddingTop();
final int bottom = parent.getHeight() - parent.getPaddingBottom();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int left = child.getRight() + params.rightMargin;
final int right = left + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
@Override
public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
if (mOrientation == VERTICAL_LIST) {
outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
} else {
outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
}
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Banner.java
================================================
package cniao5.com.cniao5shop.bean;
/**
* Created by Ivan on 15/10/2.
*/
public class Banner extends BaseBean {
private String name;
private String imgUrl;
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/BaseBean.java
================================================
package cniao5.com.cniao5shop.bean;
import java.io.Serializable;
/**
* Created by Ivan on 15/9/24.
*/
public class BaseBean implements Serializable {
protected long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Campaign.java
================================================
/*
*Campaign.java
*Created on 2015/10/3 下午10:34 by Ivan
*Copyright(c)2014 Guangzhou Onion Information Technology Co., Ltd.
*http://www.cniao5.com
*/
package cniao5.com.cniao5shop.bean;
import java.io.Serializable;
public class Campaign implements Serializable {
private Long id;
private String title;
private String imgUrl;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Category.java
================================================
package cniao5.com.cniao5shop.bean;
public class Category extends BaseBean {
public Category() {
}
public Category(String name) {
this.name = name;
}
public Category(long id ,String name) {
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/HomeCampaign.java
================================================
/*
*CampaignRecommendEx.java
*Created on 2015/10/4 上午12:12 by Ivan
*Copyright(c)2014 Guangzhou Onion Information Technology Co., Ltd.
*http://www.cniao5.com
*/
package cniao5.com.cniao5shop.bean;
import java.io.Serializable;
/**
* Copyright(c)2014 Guangzhou Onion Information Technology Co., Ltd.
* http://www.cniao5.com
*/
public class HomeCampaign implements Serializable {
private Long id;
private String title;
private Campaign cpOne;
private Campaign cpTwo;
private Campaign cpThree;
public Campaign getCpOne() {
return cpOne;
}
public void setCpOne(Campaign cpOne) {
this.cpOne = cpOne;
}
public Campaign getCpTwo() {
return cpTwo;
}
public void setCpTwo(Campaign cpTwo) {
this.cpTwo = cpTwo;
}
public Campaign getCpThree() {
return cpThree;
}
public void setCpThree(Campaign cpThree) {
this.cpThree = cpThree;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Page.java
================================================
package cniao5.com.cniao5shop.bean;
import java.util.List;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class Page<T> {
private int currentPage;
private int pageSize;
private int totalPage;
private int totalCount;
private List<T> list;
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/ShoppingCart.java
================================================
package cniao5.com.cniao5shop.bean;
import java.io.Serializable;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class ShoppingCart extends Wares implements Serializable {
private int count;
private boolean isChecked=true;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public boolean isChecked() {
return isChecked;
}
public void setIsChecked(boolean isChecked) {
this.isChecked = isChecked;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Tab.java
================================================
package cniao5.com.cniao5shop.bean;
/**
* Created by Ivan on 15/9/25.
*/
public class Tab {
private int title;
private int icon;
private Class fragment;
public Tab(Class fragment,int title, int icon) {
this.title = title;
this.icon = icon;
this.fragment = fragment;
}
public int getTitle() {
return title;
}
public void setTitle(int title) {
this.title = title;
}
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
public Class getFragment() {
return fragment;
}
public void setFragment(Class fragment) {
this.fragment = fragment;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Wares.java
================================================
package cniao5.com.cniao5shop.bean;
import java.io.Serializable;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class Wares implements Serializable {
private Long id;
private String name;
private String imgUrl;
private String description;
private Float price;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/BaseFragment.java
================================================
package cniao5.com.cniao5shop.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.widget.CNiaoToolBar;
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = createView(inflater,container,savedInstanceState);
ViewUtils.inject(this, view);
initToolBar();
init();
return view;
}
public void initToolBar(){
}
public abstract View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
public abstract void init();
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/CartFragment.java
================================================
package cniao5.com.cniao5shop.fragment;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import java.util.List;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.adapter.CartAdapter;
import cniao5.com.cniao5shop.adapter.decoration.DividerItemDecoration;
import cniao5.com.cniao5shop.bean.ShoppingCart;
import cniao5.com.cniao5shop.utils.CartProvider;
import cniao5.com.cniao5shop.widget.CNiaoToolBar;
public class CartFragment extends BaseFragment implements View.OnClickListener{
public static final int ACTION_EDIT=1;
public static final int ACTION_CAMPLATE=2;
@ViewInject(R.id.recycler_view)
private RecyclerView mRecyclerView;
@ViewInject(R.id.checkbox_all)
private CheckBox mCheckBox;
@ViewInject(R.id.txt_total)
private TextView mTextTotal;
@ViewInject(R.id.btn_order)
private Button mBtnOrder;
@ViewInject(R.id.btn_del)
private Button mBtnDel;
@ViewInject(R.id.toolbar)
protected CNiaoToolBar mToolbar;
private CartAdapter mAdapter;
private CartProvider cartProvider;
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_cart,container,false);
}
@Override
public void init() {
cartProvider = new CartProvider(getContext());
changeToolbar();
showData();
}
@OnClick(R.id.btn_del)
public void delCart(View view){
mAdapter.delCart();
}
private void showData(){
List<ShoppingCart> carts = cartProvider.getAll();
mAdapter = new CartAdapter(getContext(),carts,mCheckBox,mTextTotal);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL_LIST));
}
public void refData(){
mAdapter.clear();
List<ShoppingCart> carts = cartProvider.getAll();
mAdapter.addData(carts);
mAdapter.showTotalPrice();
}
public void changeToolbar(){
mToolbar.hideSearchView();
mToolbar.showTitleView();
mToolbar.setTitle(R.string.cart);
mToolbar.getRightButton().setVisibility(View.VISIBLE);
mToolbar.setRightButtonText("编辑");
mToolbar.getRightButton().setOnClickListener(this);
mToolbar.getRightButton().setTag(ACTION_EDIT);
}
private void showDelControl(){
mToolbar.getRightButton().setText("完成");
mTextTotal.setVisibility(View.GONE);
mBtnOrder.setVisibility(View.GONE);
mBtnDel.setVisibility(View.VISIBLE);
mToolbar.getRightButton().setTag(ACTION_CAMPLATE);
mAdapter.checkAll_None(false);
mCheckBox.setChecked(false);
}
private void hideDelControl(){
mTextTotal.setVisibility(View.VISIBLE);
mBtnOrder.setVisibility(View.VISIBLE);
mBtnDel.setVisibility(View.GONE);
mToolbar.setRightButtonText("编辑");
mToolbar.getRightButton().setTag(ACTION_EDIT);
mAdapter.checkAll_None(true);
mAdapter.showTotalPrice();
mCheckBox.setChecked(true);
}
@Override
public void onClick(View v) {
int action = (int) v.getTag();
if(ACTION_EDIT == action){
showDelControl();
}
else if(ACTION_CAMPLATE == action){
hideDelControl();
}
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/CategoryFragment.java
================================================
package cniao5.com.cniao5shop.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.cjj.MaterialRefreshLayout;
import com.cjj.MaterialRefreshListener;
import com.daimajia.slider.library.Animations.DescriptionAnimation;
import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.DefaultSliderView;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.util.List;
import cniao5.com.cniao5shop.Contants;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.WareDetailActivity;
import cniao5.com.cniao5shop.adapter.BaseAdapter;
import cniao5.com.cniao5shop.adapter.CategoryAdapter;
import cniao5.com.cniao5shop.adapter.WaresAdapter;
import cniao5.com.cniao5shop.adapter.decoration.DividerItemDecoration;
import cniao5.com.cniao5shop.bean.Banner;
import cniao5.com.cniao5shop.bean.Category;
import cniao5.com.cniao5shop.bean.Page;
import cniao5.com.cniao5shop.bean.Wares;
import cniao5.com.cniao5shop.http.BaseCallback;
import cniao5.com.cniao5shop.http.OkHttpHelper;
import cniao5.com.cniao5shop.http.SpotsCallBack;
public class CategoryFragment extends BaseFragment {
@ViewInject(R.id.recyclerview_category)
private RecyclerView mRecyclerView;
@ViewInject(R.id.recyclerview_wares)
private RecyclerView mRecyclerviewWares;
@ViewInject(R.id.refresh_layout)
private MaterialRefreshLayout mRefreshLaout;
@ViewInject(R.id.slider)
private SliderLayout mSliderLayout;
private CategoryAdapter mCategoryAdapter;
private WaresAdapter mWaresAdatper;
private OkHttpHelper mHttpHelper = OkHttpHelper.getInstance();
private int currPage=1;
private int totalPage=1;
private int pageSize=10;
private long category_id=0;
private static final int STATE_NORMAL=0;
private static final int STATE_REFREH=1;
private static final int STATE_MORE=2;
private int state=STATE_NORMAL;
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_category,container,false);
}
@Override
public void init() {
requestCategoryData();
requestBannerData();
initRefreshLayout();
}
private void initRefreshLayout(){
mRefreshLaout.setLoadMore(true);
mRefreshLaout.setMaterialRefreshListener(new MaterialRefreshListener() {
@Override
public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {
refreshData();
}
@Override
public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
if(currPage <=totalPage)
loadMoreData();
else{
// Toast.makeText()
mRefreshLaout.finishRefreshLoadMore();
}
}
});
}
private void refreshData(){
currPage =1;
state=STATE_REFREH;
requestWares(category_id);
}
private void loadMoreData(){
currPage = ++currPage;
state = STATE_MORE;
requestWares(category_id);
}
private void requestCategoryData(){
mHttpHelper.get(Contants.API.CATEGORY_LIST, new SpotsCallBack<List<Category>>(getContext()) {
@Override
public void onSuccess(Response response, List<Category> categories) {
showCategoryData(categories);
if(categories !=null && categories.size()>0)
category_id = categories.get(0).getId();
requestWares(category_id);
}
@Override
public void onError(Response response, int code, Exception e) {
}
});
}
private void showCategoryData(List<Category> categories){
mCategoryAdapter = new CategoryAdapter(getContext(),categories);
mCategoryAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Category category = mCategoryAdapter.getItem(position);
category_id = category.getId();
currPage=1;
state=STATE_NORMAL;
requestWares(category_id);
}
});
mRecyclerView.setAdapter(mCategoryAdapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL_LIST));
}
private void requestBannerData( ) {
String url = Contants.API.BANNER+"?type=1";
mHttpHelper.get(url, new SpotsCallBack<List<Banner>>(getContext()){
@Override
public void onSuccess(Response response, List<Banner> banners) {
showSliderViews(banners);
}
@Override
public void onError(Response response, int code, Exception e) {
}
});
}
private void showSliderViews(List<Banner> banners){
if(banners !=null){
for (Banner banner : banners){
DefaultSliderView sliderView = new DefaultSliderView(this.getActivity());
sliderView.image(banner.getImgUrl());
sliderView.description(banner.getName());
sliderView.setScaleType(BaseSliderView.ScaleType.Fit);
mSliderLayout.addSlider(sliderView);
}
}
mSliderLayout.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
mSliderLayout.setCustomAnimation(new DescriptionAnimation());
mSliderLayout.setPresetTransformer(SliderLayout.Transformer.Default);
mSliderLayout.setDuration(3000);
}
private void requestWares(long categoryId){
String url = Contants.API.WARES_LIST+"?categoryId="+categoryId+"&curPage="+currPage+"&pageSize="+pageSize;
mHttpHelper.get(url, new BaseCallback<Page<Wares>>() {
@Override
public void onBeforeRequest(Request request) {
}
@Override
public void onFailure(Request request, Exception e) {
}
@Override
public void onResponse(Response response) {
}
@Override
public void onSuccess(Response response, Page<Wares> waresPage) {
currPage = waresPage.getCurrentPage();
totalPage =waresPage.getTotalPage();
showWaresData(waresPage.getList());
}
@Override
public void onError(Response response, int code, Exception e) {
}
});
}
private void showWaresData(List<Wares> wares){
switch (state){
case STATE_NORMAL:
if(mWaresAdatper ==null) {
mWaresAdatper = new WaresAdapter(getContext(), wares);
mWaresAdatper.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Wares wares = mWaresAdatper.getItem(position);
Intent intent = new Intent(getActivity(), WareDetailActivity.class);
intent.putExtra(Contants.WARE,wares);
startActivity(intent);
}
});
mRecyclerviewWares.setAdapter(mWaresAdatper);
mRecyclerviewWares.setLayoutManager(new GridLayoutManager(getContext(), 2));
mRecyclerviewWares.setItemAnimator(new DefaultItemAnimator());
// mRecyclerviewWares.addItemDecoration(new DividerGridItemDecoration(getContext()));
}
else{
mWaresAdatper.clear();
mWaresAdatper.addData(wares);
}
break;
case STATE_REFREH:
mWaresAdatper.clear();
mWaresAdatper.addData(wares);
mRecyclerviewWares.scrollToPosition(0);
mRefreshLaout.finishRefresh();
break;
case STATE_MORE:
mWaresAdatper.addData(mWaresAdatper.getDatas().size(),wares);
mRecyclerviewWares.scrollToPosition(mWaresAdatper.getDatas().size());
mRefreshLaout.finishRefreshLoadMore();
break;
}
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/HomeFragment.java
================================================
package cniao5.com.cniao5shop.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.daimajia.slider.library.Animations.DescriptionAnimation;
import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.TextSliderView;
import com.google.gson.Gson;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.util.List;
import cniao5.com.cniao5shop.Contants;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.WareListActivity;
import cniao5.com.cniao5shop.adapter.HomeCatgoryAdapter;
import cniao5.com.cniao5shop.adapter.decoration.CardViewtemDecortion;
import cniao5.com.cniao5shop.bean.Banner;
import cniao5.com.cniao5shop.bean.Campaign;
import cniao5.com.cniao5shop.bean.HomeCampaign;
import cniao5.com.cniao5shop.http.BaseCallback;
import cniao5.com.cniao5shop.http.OkHttpHelper;
import cniao5.com.cniao5shop.http.SpotsCallBack;
public class HomeFragment extends BaseFragment {
@ViewInject(R.id.slider)
private SliderLayout mSliderLayout;
@ViewInject(R.id.recyclerview)
private RecyclerView mRecyclerView;
private HomeCatgoryAdapter mAdatper;
private static final String TAG="HomeFragment";
private Gson mGson = new Gson();
private List<Banner> mBanner;
private OkHttpHelper httpHelper = OkHttpHelper.getInstance();
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home,container,false);
}
@Override
public void init() {
requestImages();
initRecyclerView();
}
private void requestImages(){
String url ="http://112.124.22.238:8081/course_api/banner/query?type=1";
httpHelper.get(url, new SpotsCallBack<List<Banner>>(getContext()){
@Override
public void onSuccess(Response response, List<Banner> banners) {
mBanner = banners;
initSlider();
}
@Override
public void onError(Response response, int code, Exception e) {
}
});
}
private void initRecyclerView() {
httpHelper.get(Contants.API.CAMPAIGN_HOME, new BaseCallback<List<HomeCampaign>>() {
@Override
public void onBeforeRequest(Request request) {
}
@Override
public void onFailure(Request request, Exception e) {
}
@Override
public void onResponse(Response response) {
}
@Override
public void onSuccess(Response response, List<HomeCampaign> homeCampaigns) {
initData(homeCampaigns);
}
@Override
public void onError(Response response, int code, Exception e) {
}
});
}
private void initData(List<HomeCampaign> homeCampaigns){
mAdatper = new HomeCatgoryAdapter(homeCampaigns,getActivity());
mAdatper.setOnCampaignClickListener(new HomeCatgoryAdapter.OnCampaignClickListener() {
@Override
public void onClick(View view, Campaign campaign) {
Intent intent = new Intent(getActivity(), WareListActivity.class);
intent.putExtra(Contants.COMPAINGAIN_ID,campaign.getId());
startActivity(intent);
}
});
mRecyclerView.setAdapter(mAdatper);
mRecyclerView.addItemDecoration(new CardViewtemDecortion());
mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
}
private void initSlider(){
if(mBanner !=null){
for (Banner banner : mBanner){
TextSliderView textSliderView = new TextSliderView(this.getActivity());
textSliderView.image(banner.getImgUrl());
textSliderView.description(banner.getName());
textSliderView.setScaleType(BaseSliderView.ScaleType.Fit);
mSliderLayout.addSlider(textSliderView);
}
}
mSliderLayout.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
mSliderLayout.setCustomAnimation(new DescriptionAnimation());
mSliderLayout.setPresetTransformer(SliderLayout.Transformer.RotateUp);
mSliderLayout.setDuration(3000);
}
@Override
public void onDestroy() {
super.onDestroy();
mSliderLayout.stopAutoCycle();
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/HotFragment.java
================================================
package cniao5.com.cniao5shop.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.cjj.MaterialRefreshLayout;
import com.google.gson.reflect.TypeToken;
import com.lidroid.xutils.view.annotation.ViewInject;
import java.util.List;
import cniao5.com.cniao5shop.Contants;
import cniao5.com.cniao5shop.R;
import cniao5.com.cniao5shop.WareDetailActivity;
import cniao5.com.cniao5shop.adapter.BaseAdapter;
import cniao5.com.cniao5shop.adapter.HWAdatper;
import cniao5.com.cniao5shop.bean.Page;
import cniao5.com.cniao5shop.bean.Wares;
import cniao5.com.cniao5shop.utils.Pager;
public class HotFragment extends BaseFragment implements Pager.OnPageListener<Wares> {
private HWAdatper mAdatper;
@ViewInject(R.id.recyclerview)
private RecyclerView mRecyclerView;
@ViewInject(R.id.refresh_view)
private MaterialRefreshLayout mRefreshLaout;
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_hot,container,false);
}
@Override
public void init() {
Pager pager = Pager.newBuilder()
.setUrl(Contants.API.WARES_HOT)
.setLoadMore(true)
.setOnPageListener(this)
.setPageSize(20)
.setRefreshLayout(mRefreshLaout)
.build(getContext(), new TypeToken<Page<Wares>>() {}.getType());
pager.request();
}
@Override
public void load(List<Wares> datas, int totalPage, int totalCount) {
mAdatper = new HWAdatper(getContext(),datas);
mAdatper.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Wares wares = mAdatper.getItem(position);
Intent intent = new Intent(getActivity(), WareDetailActivity.class);
intent.putExtra(Contants.WARE,wares);
startActivity(intent);
}
});
mRecyclerView.setAdapter(mAdatper);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
// mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL_LIST));
}
@Override
public void refresh(List<Wares> datas, int totalPage, int totalCount) {
mAdatper.refreshData(datas);
mRecyclerView.scrollToPosition(0);
}
@Override
public void loadMore(List<Wares> datas, int totalPage, int totalCount) {
mAdatper.loadMoreData(datas);
mRecyclerView.scrollToPosition(mAdatper.getDatas().size());
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/MineFragment.java
================================================
package cniao5.com.cniao5shop.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import cniao5.com.cniao5shop.R;
/**
* Created by Ivan on 15/9/22.
*/
public class MineFragment extends BaseFragment{
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_mine,container,false);
}
@Override
public void init() {
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/http/BaseCallback.java
================================================
package cniao5.com.cniao5shop.http;
import com.google.gson.internal.$Gson$Types;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public abstract class BaseCallback <T> {
public Type mType;
static Type getSuperclassTypeParameter(Class<?> subclass)
{
Type superclass = subclass.getGenericSuperclass();
if (superclass instanceof Class)
{
throw new RuntimeException("Missing type parameter.");
}
ParameterizedType parameterized = (ParameterizedType) superclass;
return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
}
public BaseCallback()
{
mType = getSuperclassTypeParameter(getClass());
}
public abstract void onBeforeRequest(Request request);
public abstract void onFailure(Request request, Exception e) ;
/**
*请求成功时调用此方法
* @param response
*/
public abstract void onResponse(Response response);
/**
*
* 状态码大于200,小于300 时调用此方法
* @param response
* @param t
* @throws IOException
*/
public abstract void onSuccess(Response response,T t) ;
/**
* 状态码400,404,403,500等时调用此方法
* @param response
* @param code
* @param e
*/
public abstract void onError(Response response, int code,Exception e) ;
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/http/OkHttpHelper.java
================================================
package cniao5.com.cniao5shop.http;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.google.gson.Gson;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class OkHttpHelper {
public static final String TAG="OkHttpHelper";
private static OkHttpHelper mInstance;
private OkHttpClient mHttpClient;
private Gson mGson;
private Handler mHandler;
static {
mInstance = new OkHttpHelper();
}
private OkHttpHelper(){
mHttpClient = new OkHttpClient();
mHttpClient.setConnectTimeout(10, TimeUnit.SECONDS);
mHttpClient.setReadTimeout(10,TimeUnit.SECONDS);
mHttpClient.setWriteTimeout(30,TimeUnit.SECONDS);
mGson = new Gson();
mHandler = new Handler(Looper.getMainLooper());
};
public static OkHttpHelper getInstance(){
return mInstance;
}
public void get(String url,BaseCallback callback){
Request request = buildGetRequest(url);
request(request,callback);
}
public void post(String url,Map<String,String> param, BaseCallback callback){
Request request = buildPostRequest(url,param);
request(request,callback);
}
public void request(final Request request,final BaseCallback callback){
callback.onBeforeRequest(request);
mHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
callbackFailure(callback, request, e);
}
@Override
public void onResponse(Response response) throws IOException {
// callback.onResponse(response);
callbackResponse(callback,response);
if(response.isSuccessful()) {
String resultStr = response.body().string();
Log.d(TAG, "result=" + resultStr);
if (callback.mType == String.class){
callbackSuccess(callback,response,resultStr);
}
else {
try {
Object obj = mGson.fromJson(resultStr, callback.mType);
callbackSuccess(callback,response,obj);
}
catch (com.google.gson.JsonParseException e){ // Json解析的错误
callback.onError(response,response.code(),e);
}
}
}
else {
callbackError(callback,response,null);
}
}
});
}
private void callbackSuccess(final BaseCallback callback , final Response response, final Object obj ){
mHandler.post(new Runnable() {
@Override
public void run() {
callback.onSuccess(response, obj);
}
});
}
private void callbackError(final BaseCallback callback , final Response response, final Exception e ){
mHandler.post(new Runnable() {
@Override
public void run() {
callback.onError(response,response.code(),e);
}
});
}
private void callbackFailure(final BaseCallback callback , final Request request, final IOException e ){
mHandler.post(new Runnable() {
@Override
public void run() {
callback.onFailure(request,e);
}
});
}
private void callbackResponse(final BaseCallback callback , final Response response ){
mHandler.post(new Runnable() {
@Override
public void run() {
callback.onResponse(response);
}
});
}
private Request buildPostRequest(String url,Map<String,String> params){
return buildRequest(url,HttpMethodType.POST,params);
}
private Request buildGetRequest(String url){
return buildRequest(url,HttpMethodType.GET,null);
}
private Request buildRequest(String url,HttpMethodType methodType,Map<String,String> params){
Request.Builder builder = new Request.Builder()
.url(url);
if (methodType == HttpMethodType.POST){
RequestBody body = builderFormData(params);
builder.post(body);
}
else if(methodType == HttpMethodType.GET){
builder.get();
}
return builder.build();
}
private RequestBody builderFormData(Map<String,String> params){
FormEncodingBuilder builder = new FormEncodingBuilder();
if(params !=null){
for (Map.Entry<String,String> entry :params.entrySet() ){
builder.add(entry.getKey(),entry.getValue());
}
}
return builder.build();
}
enum HttpMethodType{
GET,
POST,
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/http/SpotsCallBack.java
================================================
package cniao5.com.cniao5shop.http;
import android.content.Context;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import dmax.dialog.SpotsDialog;
public abstract class SpotsCallBack<T> extends BaseCallback<T> {
private Context mContext;
private SpotsDialog mDialog;
public SpotsCallBack(Context context){
mContext = context;
initSpotsDialog();
}
private void initSpotsDialog(){
mDialog = new SpotsDialog(mContext,"拼命加载中...");
}
public void showDialog(){
mDialog.show();
}
public void dismissDialog(){
mDialog.dismiss();
}
public void setLoadMessage(int resId){
mDialog.setMessage(mContext.getString(resId));
}
@Override
public void onFailure(Request request, Exception e) {
dismissDialog();
}
@Override
public void onBeforeRequest(Request request) {
showDialog();
}
@Override
public void onResponse(Response response) {
dismissDialog();
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/CartProvider.java
================================================
package cniao5.com.cniao5shop.utils;
import android.content.Context;
import android.util.SparseArray;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
import cniao5.com.cniao5shop.bean.ShoppingCart;
import cniao5.com.cniao5shop.bean.Wares;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class CartProvider {
public static final String CART_JSON="cart_json";
private SparseArray<ShoppingCart> datas =null;
private Context mContext;
public CartProvider(Context context){
mContext = context;
datas = new SparseArray<>(10);
listToSparse();
}
public void put(ShoppingCart cart){
ShoppingCart temp = datas.get(cart.getId().intValue());
if(temp !=null){
temp.setCount(temp.getCount()+1);
}
else{
temp = cart;
temp.setCount(1);
}
datas.put(cart.getId().intValue(),temp);
commit();
}
public void put(Wares wares){
ShoppingCart cart = convertData(wares);
put(cart);
}
public void update(ShoppingCart cart){
datas.put(cart.getId().intValue(),cart);
commit();
}
public void delete(ShoppingCart cart){
datas.delete(cart.getId().intValue());
commit();
}
public List<ShoppingCart> getAll(){
return getDataFromLocal();
}
public void commit(){
List<ShoppingCart> carts = sparseToList();
PreferencesUtils.putString(mContext,CART_JSON,JSONUtil.toJSON(carts));
}
private List<ShoppingCart> sparseToList(){
int size = datas.size();
List<ShoppingCart> list = new ArrayList<>(size);
for (int i=0;i<size;i++){
list.add(datas.valueAt(i));
}
return list;
}
private void listToSparse(){
List<ShoppingCart> carts = getDataFromLocal();
if(carts!=null && carts.size()>0){
for (ShoppingCart cart:
carts) {
datas.put(cart.getId().intValue(),cart);
}
}
}
public List<ShoppingCart> getDataFromLocal(){
String json = PreferencesUtils.getString(mContext,CART_JSON);
List<ShoppingCart> carts =null;
if(json !=null ){
carts = JSONUtil.fromJson(json,new TypeToken<List<ShoppingCart>>(){}.getType());
}
return carts;
}
public ShoppingCart convertData(Wares item){
ShoppingCart cart = new ShoppingCart();
cart.setId(item.getId());
cart.setDescription(item.getDescription());
cart.setImgUrl(item.getImgUrl());
cart.setName(item.getName());
cart.setPrice(item.getPrice());
return cart;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/JSONUtil.java
================================================
/*
*JSONUtil.java
*Created on 2014-9-29 上午9:54 by Ivan
*Copyright(c)2014 Guangzhou Onion Information Technology Co., Ltd.
*http://www.cniao5.com
*/
package cniao5.com.cniao5shop.utils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.lang.reflect.Type;
/**
* Created by Ivan on 14-9-29.
* Copyright(c)2014 Guangzhou Onion Information Technology Co., Ltd.
* http://www.cniao5.com
*/
public class JSONUtil {
private static Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
public static Gson getGson(){
return gson;
}
public static <T> T fromJson(String json,Class<T> clz){
return gson.fromJson(json,clz);
}
public static <T> T fromJson(String json,Type type){
return gson.fromJson(json,type);
}
public static String toJSON(Object object){
return gson.toJson(object);
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/Pager.java
================================================
package cniao5.com.cniao5shop.utils;
import android.content.Context;
import android.widget.Toast;
import com.cjj.MaterialRefreshLayout;
import com.cjj.MaterialRefreshListener;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cniao5.com.cniao5shop.bean.Page;
import cniao5.com.cniao5shop.http.OkHttpHelper;
import cniao5.com.cniao5shop.http.SpotsCallBack;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class Pager {
private static Builder builder;
private OkHttpHelper httpHelper;
private static final int STATE_NORMAL=0;
private static final int STATE_REFREH=1;
private static final int STATE_MORE=2;
private int state=STATE_NORMAL;
private Pager(){
httpHelper = OkHttpHelper.getInstance();
initRefreshLayout();
}
public static Builder newBuilder(){
builder = new Builder();
return builder;
}
public void request(){
requestData();
}
public void putParam(String key,Object value){
builder.params.put(key,value);
}
private void initRefreshLayout(){
builder.mRefreshLayout.setLoadMore(builder.canLoadMore);
builder.mRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {
@Override
public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {
builder.mRefreshLayout.setLoadMore(builder.canLoadMore);
refresh();
}
@Override
public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
if(builder.pageIndex<builder.totalPage)
loadMore();
else{
Toast.makeText(builder.mContext, "无更多数据", Toast.LENGTH_LONG).show();
materialRefreshLayout.finishRefreshLoadMore();
materialRefreshLayout.setLoadMore(false);
}
}
});
}
/**
* 请求数据
*/
private void requestData(){
String url = buildUrl();
httpHelper.get(url, new RequestCallBack(builder.mContext));
}
/**
* 显示数据
*/
private <T> void showData(List<T> datas,int totalPage,int totalCount){
if(datas ==null|| datas.size()<=0){
Toast.makeText(builder.mContext,"加载不到数据",Toast.LENGTH_LONG).show();
return;
}
if(STATE_NORMAL==state){
if(builder.onPageListener !=null){
builder.onPageListener.load(datas,totalPage,totalCount);
}
}
else if(STATE_REFREH==state) {
builder.mRefreshLayout.finishRefresh();
if(builder.onPageListener !=null){
builder.onPageListener.refresh(datas,totalPage,totalCount);
}
}
else if(STATE_MORE == state){
builder.mRefreshLayout.finishRefreshLoadMore();
if(builder.onPageListener !=null){
builder.onPageListener.loadMore(datas,totalPage,totalCount);
}
}
}
/**
* 刷新数据
*/
private void refresh(){
state=STATE_REFREH;
builder.pageIndex =1;
requestData();
}
/**
* 隐藏数据
*/
private void loadMore(){
state=STATE_MORE;
builder.pageIndex =++builder.pageIndex;
requestData();
}
/**
* 构建URL
* @return
*/
private String buildUrl(){
return builder.mUrl +"?"+buildUrlParams();
}
private String buildUrlParams() {
HashMap<String, Object> map = builder.params;
map.put("curPage",builder.pageIndex);
map.put("pageSize",builder.pageSize);
StringBuffer sb = new StringBuffer();
for (Map.Entry<String, Object> entry : map.entrySet()) {
sb.append(entry.getKey() + "=" + entry.getValue());
sb.append("&");
}
String s = sb.toString();
if (s.endsWith("&")) {
s = s.substring(0,s.length()-1);
}
return s;
}
/**
*
*/
public static class Builder{
private Context mContext;
private Type mType;
private String mUrl;
private MaterialRefreshLayout mRefreshLayout;
private boolean canLoadMore;
private int totalPage = 1;
private int pageIndex = 1;
private int pageSize = 10;
private HashMap<String,Object> params = new HashMap<>(5);
private OnPageListener onPageListener;
public Builder setUrl(String url){
builder.mUrl = url;
return builder;
}
public Builder setPageSize(int pageSize){
this.pageSize = pageSize;
return builder;
}
public Builder putParam(String key,Object value){
params.put(key,value);
return builder;
}
public Builder setLoadMore(boolean loadMore){
this.canLoadMore = loadMore;
return builder;
}
public Builder setRefreshLayout(MaterialRefreshLayout refreshLayout){
this.mRefreshLayout = refreshLayout;
return builder;
}
public Builder setOnPageListener(OnPageListener onPageListener) {
this.onPageListener = onPageListener;
return builder;
}
public Pager build(Context context, Type type){
this.mType = type;
this.mContext =context;
valid();
return new Pager();
}
private void valid(){
if(this.mContext==null)
throw new RuntimeException("content can't be null");
if(this.mUrl==null || "".equals(this.mUrl))
throw new RuntimeException("url can't be null");
if(this.mRefreshLayout==null)
throw new RuntimeException("MaterialRefreshLayout can't be null");
}
}
class RequestCallBack<T> extends SpotsCallBack<Page<T>>{
public RequestCallBack(Context context) {
super(context);
super.mType = builder.mType;
}
@Override
public void onFailure(Request request, Exception e) {
dismissDialog();
Toast.makeText(builder.mContext,"请求出错:"+e.getMessage(),Toast.LENGTH_LONG).show();
if(STATE_REFREH==state) {
builder.mRefreshLayout.finishRefresh();
}
else if(STATE_MORE == state){
builder.mRefreshLayout.finishRefreshLoadMore();
}
}
@Override
public void onSuccess(Response response, Page<T> page) {
builder.pageIndex = page.getCurrentPage();
builder.pageSize = page.getPageSize();
builder.totalPage = page.getTotalPage();
showData(page.getList(),page.getTotalPage(),page.getTotalCount());
}
@Override
public void onError(Response response, int code, Exception e) {
Toast.makeText(builder.mContext,"加载数据失败",Toast.LENGTH_LONG).show();
if(STATE_REFREH==state) {
builder.mRefreshLayout.finishRefresh();
}
else if(STATE_MORE == state){
builder.mRefreshLayout.finishRefreshLoadMore();
}
}
}
public interface OnPageListener<T>{
void load(List<T> datas,int totalPage,int totalCount);
void refresh(List<T> datas,int totalPage,int totalCount);
void loadMore(List<T> datas,int totalPage,int totalCount);
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/PreferencesUtils.java
================================================
package cniao5.com.cniao5shop.utils;
import android.content.Context;
import android.content.SharedPreferences;
/**
* PreferencesUtils, easy to get or put data
* <ul>
* <strong>Preference Name</strong>
* <li>you can change preference name by {@link #PREFERENCE_NAME}</li>
* </ul>
* <ul>
* <strong>Put Value</strong>
* <li>put string {@link #putString(Context, String, String)}</li>
* <li>put int {@link #putInt(Context, String, int)}</li>
* <li>put long {@link #putLong(Context, String, long)}</li>
* <li>put float {@link #putFloat(Context, String, float)}</li>
* <li>put boolean {@link #putBoolean(Context, String, boolean)}</li>
* </ul>
* <ul>
* <strong>Get Value</strong>
* <li>get string {@link #getString(Context, String)}, {@link #getString(Context, String, String)}</li>
* <li>get int {@link #getInt(Context, String)}, {@link #getInt(Context, String, int)}</li>
* <li>get long {@link #getLong(Context, String)}, {@link #getLong(Context, String, long)}</li>
* <li>get float {@link #getFloat(Context, String)}, {@link #getFloat(Context, String, float)}</li>
* <li>get boolean {@link #getBoolean(Context, String)}, {@link #getBoolean(Context, String, boolean)}</li>
* </ul>
*
*/
public class PreferencesUtils {
public static String PREFERENCE_NAME = "Cniao_Pref_Common";
/**
* put string preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putString(Context context, String key, String value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString(key, value);
return editor.commit();
}
/**
* get string preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or null. Throws ClassCastException if there is a preference with this
* name that is not a string
* @see #getString(Context, String, String)
*/
public static String getString(Context context, String key) {
return getString(context, key, null);
}
/**
* get string preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a string
*/
public static String getString(Context context, String key, String defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getString(key, defaultValue);
}
/**
* put int preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putInt(Context context, String key, int value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putInt(key, value);
return editor.commit();
}
/**
* get int preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
* name that is not a int
* @see #getInt(Context, String, int)
*/
public static int getInt(Context context, String key) {
return getInt(context, key, -1);
}
/**
* get int preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a int
*/
public static int getInt(Context context, String key, int defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getInt(key, defaultValue);
}
/**
* put long preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putLong(Context context, String key, long value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(key, value);
return editor.commit();
}
/**
* get long preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
* name that is not a long
* @see #getLong(Context, String, long)
*/
public static long getLong(Context context, String key) {
return getLong(context, key, -1);
}
/**
* get long preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a long
*/
public static long getLong(Context context, String key, long defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getLong(key, defaultValue);
}
/**
* put float preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putFloat(Context context, String key, float value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putFloat(key, value);
return editor.commit();
}
/**
* get float preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
* name that is not a float
* @see #getFloat(Context, String, float)
*/
public static float getFloat(Context context, String key) {
return getFloat(context, key, -1);
}
/**
* get float preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a float
*/
public static float getFloat(Context context, String key, float defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getFloat(key, defaultValue);
}
/**
* put boolean preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putBoolean(Context context, String key, boolean value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(key, value);
return editor.commit();
}
/**
* get boolean preferences, default is false
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or false. Throws ClassCastException if there is a preference with this
* name that is not a boolean
* @see #getBoolean(Context, String, boolean)
*/
public static boolean getBoolean(Context context, String key) {
return getBoolean(context, key, false);
}
/**
* get boolean preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a boolean
*/
public static boolean getBoolean(Context context, String key, boolean defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getBoolean(key, defaultValue);
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/TimeUtils.java
================================================
package cniao5.com.cniao5shop.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* TimeUtils
*
*/
public class TimeUtils {
public static final SimpleDateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static final SimpleDateFormat DATE_FORMAT_DATE = new SimpleDateFormat("yyyy-MM-dd");
/**
* long time to string
*
* @param timeInMillis
* @param dateFormat
* @return
*/
public static String getTime(long timeInMillis, SimpleDateFormat dateFormat) {
return dateFormat.format(new Date(timeInMillis));
}
/**
* long time to string, format is {@link #DEFAULT_DATE_FORMAT}
*
* @param timeInMillis
* @return
*/
public static String getTime(long timeInMillis) {
return getTime(timeInMillis, DEFAULT_DATE_FORMAT);
}
/**
* get current time in milliseconds
*
* @return
*/
public static long getCurrentTimeInLong() {
return System.currentTimeMillis();
}
/**
* get current time in milliseconds, format is {@link #DEFAULT_DATE_FORMAT}
*
* @return
*/
public static String getCurrentTimeInString() {
return getTime(getCurrentTimeInLong());
}
/**
* get current time in milliseconds
*
* @return
*/
public static String getCurrentTimeInString(SimpleDateFormat dateFormat) {
return getTime(getCurrentTimeInLong(), dateFormat);
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/ToastUtils.java
================================================
package cniao5.com.cniao5shop.utils;
import android.content.Context;
import android.widget.Toast;
/**
* ToastUtils
*
*
*/
public class ToastUtils {
public static void show(Context context, int resId) {
show(context, context.getResources().getText(resId), Toast.LENGTH_LONG);
}
public static void show(Context context, int resId, int duration) {
show(context, context.getResources().getText(resId), duration);
}
public static void show(Context context, CharSequence text) {
show(context, text, Toast.LENGTH_LONG);
}
public static void show(Context context, CharSequence text, int duration) {
Toast.makeText(context, text, duration).show();
}
public static void show(Context context, int resId, Object... args) {
show(context, String.format(context.getResources().getString(resId), args), Toast.LENGTH_LONG);
}
public static void show(Context context, String format, Object... args) {
show(context, String.format(format, args), Toast.LENGTH_LONG);
}
public static void show(Context context, int resId, int duration, Object... args) {
show(context, String.format(context.getResources().getString(resId), args), duration);
}
public static void show(Context context, String format, int duration, Object... args) {
show(context, String.format(format, args), duration);
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/widget/CNiaoToolBar.java
================================================
package cniao5.com.cniao5shop.widget;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v7.internal.widget.TintTypedArray;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import cniao5.com.cniao5shop.R;
public class CNiaoToolBar extends Toolbar {
private LayoutInflater mInflater;
private View mView;
private TextView mTextTitle;
private EditText mSearchView;
private Button mRightButton;
public CNiaoToolBar(Context context) {
this(context,null);
}
public CNiaoToolBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CNiaoToolBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
setContentInsetsRelative(10,10);
if(attrs !=null) {
final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
R.styleable.CNiaoToolBar, defStyleAttr, 0);
final Drawable rightIcon = a.getDrawable(R.styleable.CNiaoToolBar_rightButtonIcon);
if (rightIcon != null) {
//setNavigationIcon(navIcon);
setRightButtonIcon(rightIcon);
}
boolean isShowSearchView = a.getBoolean(R.styleable.CNiaoToolBar_isShowSearchView,false);
if(isShowSearchView){
showSearchView();
hideTitleView();
}
CharSequence rightButtonText = a.getText(R.styleable.CNiaoToolBar_rightButtonText);
if(rightButtonText !=null){
setRightButtonText(rightButtonText);
}
a.recycle();
}
}
private void initView() {
if(mView == null) {
mInflater = LayoutInflater.from(getContext());
mView = mInflater.inflate(R.layout.toolbar, null);
mTextTitle = (TextView) mView.findViewById(R.id.toolbar_title);
mSearchView = (EditText) mView.findViewById(R.id.toolbar_searchview);
mRightButton = (Button) mView.findViewById(R.id.toolbar_rightButton);
LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL);
addView(mView, lp);
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void setRightButtonIcon(Drawable icon){
if(mRightButton !=null){
mRightButton.setBackground(icon);
mRightButton.setVisibility(VISIBLE);
}
}
public void setRightButtonIcon(int icon){
setRightButtonIcon(getResources().getDrawable(icon));
}
public void setRightButtonOnClickListener(OnClickListener li){
mRightButton.setOnClickListener(li);
}
public void setRightButtonText(CharSequence text){
mRightButton.setText(text);
mRightButton.setVisibility(VISIBLE);
}
public void setRightButtonText(int id){
setRightButtonText(getResources().getString(id));
}
public Button getRightButton(){
return this.mRightButton;
}
@Override
public void setTitle(int resId) {
setTitle(getContext().getText(resId));
}
@Override
public void setTitle(CharSequence title) {
initView();
if(mTextTitle !=null) {
mTextTitle.setText(title);
showTitleView();
}
}
public void showSearchView(){
if(mSearchView !=null)
mSearchView.setVisibility(VISIBLE);
}
public void hideSearchView(){
if(mSearchView !=null)
mSearchView.setVisibility(GONE);
}
public void showTitleView(){
if(mTextTitle !=null)
mTextTitle.setVisibility(VISIBLE);
}
public void hideTitleView() {
if (mTextTitle != null)
mTextTitle.setVisibility(GONE);
}
//
// private void ensureRightButtonView() {
// if (mRightImageButton == null) {
// mRightImageButton = new ImageButton(getContext(), null,
// android.support.v7.appcompat.R.attr.toolbarNavigationButtonStyle);
// final LayoutParams lp = generateDefaultLayoutParams();
// lp.gravity = GravityCompat.START | (Gravity.VERTICAL_GRAVITY_MASK);
// mRightImageButton.setLayoutParams(lp);
// }
// }
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/widget/FragmentTabHost.java
================================================
package cniao5.com.cniao5shop.widget;
/**
* Created by monkey
* on 2014/9/24
* 功能描述:修改过的FragmentTabHost,保存fragment实例不销毁
*/
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.util.ArrayList;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabWidget;
/**
* Special TabHost that allows the use of {@link Fragment} objects for its tab
* content. When placing this in a view hierarchy, after inflating the hierarchy
* you must call {@link #setup(Context, FragmentManager, int)} to complete the
* initialization of the tab host.
*
* <p>
* Here is a simple example of using a FragmentTabHost in an Activity:
*
* {@sample
* development/samples/Support4Demos/src/com/example/android/supportv4/app/
* FragmentTabs.java complete}
*
* <p>
* This can also be used inside of a fragment through fragment nesting:
*
* {@sample
* development/samples/Support4Demos/src/com/example/android/supportv4/app/
* FragmentTabsFragmentSupport.java complete}
*/
public class FragmentTabHost extends TabHost implements
TabHost.OnTabChangeListener {
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
private FrameLayout mRealTabContent;
private Context mContext;
private FragmentManager mFragmentManager;
private int mContainerId;
private OnTabChangeListener mOnTabChangeListener;
private TabInfo mLastTab;
private boolean mAttached;
static final class TabInfo {
private final String tag;
private final Class<?> clss;
private final Bundle args;
private Fragment fragment;
TabInfo(String _tag, Class<?> _class, Bundle _args) {
tag = _tag;
clss = _class;
args = _args;
}
}
static class DummyTabFactory implements TabContentFactory {
private final Context mContext;
public DummyTabFactory(Context context) {
mContext = context;
}
@Override
public View createTabContent(String tag) {
View v = new View(mContext);
v.setMinimumWidth(0);
v.setMinimumHeight(0);
return v;
}
}
static class SavedState extends BaseSavedState {
String curTab;
SavedState(Parcelable superState) {
super(superState);
}
private SavedState(Parcel in) {
super(in);
curTab = in.readString();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeString(curTab);
}
@Override
public String toString() {
return "FragmentTabHost.SavedState{"
+ Integer.toHexString(System.identityHashCode(this))
+ " curTab=" + curTab + "}";
}
public static final Creator<SavedState> CREATOR = new Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
public FragmentTabHost(Context context) {
// Note that we call through to the version that takes an AttributeSet,
// because the simple Context construct can result in a broken object!
super(context, null);
initFragmentTabHost(context, null);
}
public FragmentTabHost(Context context, AttributeSet attrs) {
super(context, attrs);
initFragmentTabHost(context, attrs);
}
private void initFragmentTabHost(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs,
new int[] { android.R.attr.inflatedId }, 0, 0);
mContainerId = a.getResourceId(0, 0);
a.recycle();
super.setOnTabChangedListener(this);
}
private void ensureHierarchy(Context context) {
// If owner hasn't made its own view hierarchy, then as a convenience
// we will construct a standard one here.
if (findViewById(android.R.id.tabs) == null) {
LinearLayout ll = new LinearLayout(context);
ll.setOrientation(LinearLayout.VERTICAL);
addView(ll, new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
TabWidget tw = new TabWidget(context);
tw.setId(android.R.id.tabs);
tw.setOrientation(TabWidget.HORIZONTAL);
ll.addView(tw, new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0));
FrameLayout fl = new FrameLayout(context);
fl.setId(android.R.id.tabcontent);
ll.addView(fl, new LinearLayout.LayoutParams(0, 0, 0));
mRealTabContent = fl = new FrameLayout(context);
mRealTabContent.setId(mContainerId);
ll.addView(fl, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, 0, 1));
}
}
/**
* @deprecated Don't call the original TabHost setup, you must instead call
* {@link #setup(Context, FragmentManager)} or
* {@link #setup(Context, FragmentManager, int)}.
*/
@Override
@Deprecated
public void setup() {
throw new IllegalStateException(
"Must call setup() that takes a Context and FragmentManager");
}
public void setup(Context context, FragmentManager manager) {
ensureHierarchy(context); // Ensure views required by super.setup()
super.setup();
mContext = context;
mFragmentManager = manager;
ensureContent();
}
public void setup(Context context, FragmentManager manager, int containerId) {
ensureHierarchy(context); // Ensure views required by super.setup()
super.setup();
mContext = context;
mFragmentManager = manager;
mContainerId = containerId;
ensureContent();
mRealTabContent.setId(containerId);
// We must have an ID to be able to save/restore our state. If
// the owner hasn't set one at this point, we will set it ourself.
if (getId() == View.NO_ID) {
setId(android.R.id.tabhost);
}
}
private void ensureContent() {
if (mRealTabContent == null) {
mRealTabContent = (FrameLayout) findViewById(mContainerId);
if (mRealTabContent == null) {
throw new IllegalStateException(
"No tab content FrameLayout found for id "
+ mContainerId);
}
}
}
@Override
public void setOnTabChangedListener(OnTabChangeListener l) {
mOnTabChangeListener = l;
}
public void addTab(TabSpec tabSpec, Class<?> clss, Bundle args) {
tabSpec.setContent(new DummyTabFactory(mContext));
String tag = tabSpec.getTag();
TabInfo info = new TabInfo(tag, clss, args);
if (mAttached) {
// If we are already attached to the window, then check to make
// sure this tab's fragment is inactive if it exists. This shouldn't
// normally happen.
info.fragment = mFragmentManager.findFragmentByTag(tag);
if (info.fragment != null && !info.fragment.isDetached()) {
FragmentTransaction ft = mFragmentManager.beginTransaction();
// ft.detach(info.fragment);
ft.hide(info.fragment);
ft.commit();
}
}
mTabs.add(info);
addTab(tabSpec);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
String currentTab = getCurrentTabTag();
// Go through all tabs and make sure their fragments match
// the correct state.
FragmentTransaction ft = null;
for (int i = 0; i < mTabs.size(); i++) {
TabInfo tab = mTabs.get(i);
tab.fragment = mFragmentManager.findFragmentByTag(tab.tag);
// if (tab.fragment != null && !tab.fragment.isDetached()) {
if (tab.fragment != null) {
if (tab.tag.equals(currentTab)) {
// The fragment for this tab is already there and
// active, and it is what we really want to have
// as the current tab. Nothing to do.
mLastTab = tab;
} else {
// This fragment was restored in the active state,
// but is not the current tab. Deactivate it.
if (ft == null) {
ft = mFragmentManager.beginTransaction();
}
// ft.detach(tab.fragment);
ft.hide(tab.fragment);
}
}
}
// We are now ready to go. Make sure we are switched to the
// correct tab.
mAttached = true;
ft = doTabChanged(currentTab, ft);
if (ft != null) {
ft.commitAllowingStateLoss();
mFragmentManager.executePendingTransactions();
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mAttached = false;
}
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.curTab = getCurrentTabTag();
return ss;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
setCurrentTabByTag(ss.curTab);
}
@Override
public void onTabChanged(String tabId) {
if (mAttached) {
FragmentTransaction ft = doTabChanged(tabId, null);
if (ft != null) {
ft.commit();
}
}
if (mOnTabChangeListener != null) {
mOnTabChangeListener.onTabChanged(tabId);
}
}
private FragmentTransaction doTabChanged(String tabId,
FragmentTransaction ft) {
TabInfo newTab = null;
for (int i = 0; i < mTabs.size(); i++) {
TabInfo tab = mTabs.get(i);
if (tab.tag.equals(tabId)) {
newTab = tab;
}
}
if (newTab == null) {
throw new IllegalStateException("No tab known for tag " + tabId);
}
if (mLastTab != newTab) {
if (ft == null) {
ft = mFragmentManager.beginTransaction();
}
if (mLastTab != null) {
if (mLastTab.fragment != null) {
// ft.detach(mLastTab.fragment);
ft.hide(mLastTab.fragment);
}
}
if (newTab != null) {
if (newTab.fragment == null) {
newTab.fragment = Fragment.instantiate(mContext,
newTab.clss.getName(), newTab.args);
ft.add(mContainerId, newTab.fragment, newTab.tag);
} else {
// ft.attach(newTab.fragment);
ft.show(newTab.fragment);
}
}
mLastTab = newTab;
}
return ft;
}
}
================================================
FILE: app/src/main/java/cniao5/com/cniao5shop/widget/NumberAddSubView.java
================================================
package cniao5.com.cniao5shop.widget;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v7.internal.widget.TintTypedArray;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import cniao5.com.cniao5shop.R;
/**
* Created by <a href="http://www.cniao5.com">菜鸟窝</a>
* 一个专业的Android开发在线教育平台
*/
public class NumberAddSubView extends LinearLayout implements View.OnClickListener {
public static final String TAG="NumberAddSubView";
public static final int DEFUALT_MAX=1000;
private TextView mEtxtNum;
private Button mBtnAdd;
private Button mBtnSub;
private OnButtonClickListener onButtonClickListener;
private LayoutInflater mInflater;
private int value;
private int minValue;
private int maxValue=DEFUALT_MAX;
public NumberAddSubView(Context context) {
this(context, null);
}
public NumberAddSubView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public NumberAddSubView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mInflater = LayoutInflater.from(context);
initView();
if(attrs !=null){
final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
R.styleable.NumberAddSubView, defStyleAttr, 0);
int val = a.getInt(R.styleable.NumberAddSubView_value,0);
setValue(val);
int maxVal = a.getInt(R.styleable.NumberAddSubView_maxValue,0);
if(maxVal!=0)
setMaxValue(maxVal);
int minVal = a.getInt(R.styleable.NumberAddSubView_minValue,0);
setMinValue(minVal);
Drawable etBackground = a.getDrawable(R.styleable.NumberAddSubView_editBackground);
if(etBackground!=null)
setEditTextBackground(etBackground);
Drawable buttonAddBackground = a.getDrawable(R.styleable.NumberAddSubView_buttonAddBackgroud);
if(buttonAddBackground!=null)
setButtonAddBackgroud(buttonAddBackground);
Drawable buttonSubBackground = a.getDrawable(R.styleable.NumberAddSubView_buttonSubBackgroud);
if(buttonSubBackground!=null)
setButtonSubBackgroud(buttonSubBackground);
a.recycle();
}
}
private void initView(){
View view = mInflater.inflate(R.layout.widet_num_add_sub,this,true);
mEtxtNum = (TextView) view.findViewById(R.id.etxt_num);
mEtxtNum.setInputType(InputType.TYPE_NULL);
mEtxtNum.setKeyListener(null);
mBtnAdd = (Button) view.findViewById(R.id.btn_add);
mBtnSub = (Button) view.findViewById(R.id.btn_sub);
mBtnAdd.setOnClickListener(this);
mBtnSub.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.btn_add){
numAdd();
if(onButtonClickListener !=null){
onButtonClickListener.onButtonAddClick(v,this.value);
}
}
else if(v.getId()==R.id.btn_sub){
numSub();
if(onButtonClickListener !=null){
onButtonClickListener.onButtonSubClick(v,this.value);
}
}
}
private void numAdd(){
getValue();
if(this.value<=maxValue)
this.value=+this.value+1;
mEtxtNum.setText(value+"");
}
private void numSub(){
getValue();
if(this.value>minValue)
this.value=this.value-1;
mEtxtNum.setText(value+"");
}
public int getValue(){
String value = mEtxtNum.getText().toString();
if(value !=null && !"".equals(value))
this.value = Integer.parseInt(value);
return this.value;
}
public void setValue(int value) {
mEtxtNum.setText(value+"");
this.value = value;
}
public void setMaxValue(int maxValue) {
this.maxValue = maxValue;
}
public void setMinValue(int minValue) {
this.minValue = minValue;
}
public void setEditTextBackground(Drawable drawable){
mEtxtNum.setBackgroundDrawable(drawable);
}
public void setEditTextBackground(int drawableId){
setEditTextBackground(getResources().getDrawable(drawableId));
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void setButtonAddBackgroud(Drawable backgroud){
this.mBtnAdd.setBackground(backgroud);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void setButtonSubBackgroud(Drawable backgroud){
this.mBtnSub.setBackground(backgroud);
}
public void setOnButtonClickListener(OnButtonClickListener onButtonClickListener) {
this.onButtonClickListener = onButtonClickListener;
}
public interface OnButtonClickListener{
public void onButtonAddClick(View view, int value);
public void onButtonSubClick(View view, int value);
}
}
================================================
FILE: app/src/main/res/color/grey_btn_text_color.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/normal_text_color_disable" />
<item android:state_pressed="true" android:color="@color/black" />
<item android:color="@color/normal_text_color" />
</selector>
================================================
FILE: app/src/main/res/color/selector_tab_text.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#eb4f38" />
<item android:state_active="true" android:color="#eb4f38"/>
<item android:state_selected="false" android:color="#a9b7b7" />
<item android:state_active="false" android:color="#a9b7b7"/>
</selector>
================================================
FILE: app/src/main/res/color/white_color_selector.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/white_color_disable" />
<item android:color="@color/white" />
</selector>
================================================
FILE: app/src/main/res/drawable/bg_btn_style_green.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/green_btn_color_disable" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/green_btn_color_pressed" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/green_btn_color_normal" />
</shape>
</item>
</selector>
================================================
FILE: app/src/main/res/drawable/bg_btn_style_grey.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/grey_btn_color_disable" />
<stroke android:width="1.0px" android:color="@color/grey_btn_stroke_color_disable" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/grey_btn_color_pressed" />
<stroke android:width="1.0px" android:color="@color/grey_btn_stroke_color_pressed" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/grey_btn_color_normal" />
<stroke android:width="1.0px" android:color="@color/grey_btn_stroke_color_normal" />
</shape>
</item>
</selector>
================================================
FILE: app/src/main/res/drawable/bg_btn_style_red.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/red_btn_color_disable" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/red_btn_color_pressed" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/red_btn_color_normal" />
</shape>
</item>
</selector>
================================================
FILE: app/src/main/res/drawable/bg_btn_style_white.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/grey_btn_color_disable" />
<stroke android:width="1.0dp" android:color="#ddd" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/grey_btn_color_pressed" />
<stroke android:width="1.0dp" android:color="#ddd" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/buttonCornerSize" />
<solid android:color="@color/white" />
<stroke android:width="1.0dp" android:color="#ddd" />
</shape>
</item>
</selector>
================================================
FILE: app/src/main/res/drawable/selector_checkbox.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--<item>-->
<!--<shape android:shape="rectangle">-->
<!--<size android:height="40dp" android:width="40dp"/>-->
<!--<corners android:radius="20dp"/>-->
<!--<solid android:color="@color/white" />-->
<!--<stroke android:width="1.0dp" android:color="#ddd" />-->
<!--</shape>-->
<!--</item>-->
<!--<item android:state_checked="true">-->
<!--<shape android:shape="rectangle">-->
<!--<size android:height="40dp" android:width="40dp"/>-->
<!--<corners android:radius="20dp"/>-->
<!--<solid android:color="?attr/colorPrimary" />-->
<!--<stroke android:width="1.0dp" android:color="#ddd" />-->
<!--</shape>-->
<!--</item>-->
<!--<item android:state_checked="false">-->
<!--<shape android:shape="rectangle">-->
<!--<size android:height="40dp" android:width="40dp"/>-->
<!--<corners android:radius="20dp"/>-->
<!--<solid android:color="@color/white" />-->
<!--<stroke android:width="1.0dp" android:color="#ddd" />-->
<!--</shape>-->
<!--</item>-->
<item android:drawable="@drawable/icon_check_checked_32" android:state_checked="true"/>
<item android:drawable="@drawable/icon_check_32" android:state_checked="false"/>
<item android:drawable="@drawable/icon_check_32"/>
</selector>
================================================
FILE: app/src/main/res/drawable/selector_icon_cart.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_cart" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_cartfill_press" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_cartfill_press" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_cartfill_press" />
<!-- Pressed -->
<item android:state_selected="true" android:state_pressed="true" android:drawable="@mipmap/icon_cartfill_press" />
<item android:state_pressed="true" android:drawable="@mipmap/icon_cartfill_press" />
</selector>
================================================
FILE: app/src/main/res/drawable/selector_icon_category.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_discover" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_discover_press" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_discover_press" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_discover_press" />
<!-- Pressed -->
<item android:state_selected="true" android:state_pressed="true" android:drawable="@mipmap/icon_discover_press" />
<item android:state_pressed="true" android:drawable="@mipmap/icon_discover_press" />
</selector>
================================================
FILE: app/src/main/res/drawable/selector_icon_home.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_home" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_home_press" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_home_press" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_home_press" />
<!-- Pressed -->
<item android:state_selected="true" android:state_pressed="true" android:drawable="@mipmap/icon_home_press" />
<item android:state_pressed="true" android:drawable="@mipmap/icon_home_press" />
</selector>
================================================
FILE: app/src/main/res/drawable/selector_icon_hot.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_hot" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_hot_press" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_hot_press" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_hot_press" />
<!-- Pressed -->
<item android:state_selected="true" android:state_pressed="true" android:drawable="@mipmap/icon_hot_press" />
<item android:state_pressed="true" android:drawable="@mipmap/icon_hot_press" />
</selector>
================================================
FILE: app/src/main/res/drawable/selector_icon_mine.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_user" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_user_press" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@mipmap/icon_user_press" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@mipmap/icon_user_press" />
<!-- Pressed -->
<item android:state_selected="true" android:state_pressed="true" android:drawable="@mipmap/icon_user_press" />
<item android:state_pressed="true" android:drawable="@mipmap/icon_user_press" />
</selector>
================================================
FILE: app/src/main/res/drawable/selector_list_item.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@color/gainsboro" />
<item android:state_pressed="true" android:drawable="@color/gainsboro" />
<item android:drawable="@color/white"/>
</selector>
================================================
FILE: app/src/main/res/drawable/selector_number_add_sub.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<corners android:radius="2dp"/>
<stroke android:width="1dp"
android:color="#ddd"/>
<solid android:color="#FFFFFF" />
</shape>
================================================
FILE: app/src/main/res/drawable/selector_search_view.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" >
<shape android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="#eb4f38" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="#eb4f38" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="#D82917" />
</shape>
</item>
</selector>
================================================
FILE: app/src/main/res/layout/activity_main.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity"
android:orientation="vertical">
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="@color/bg_color"
/>
<cniao5.com.cniao5shop.widget.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" />
</cniao5.com.cniao5shop.widget.FragmentTabHost>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_test.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">
<cniao5.com.cniao5shop.widget.CNiaoToolBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:isShowSearchView="true">
</cniao5.com.cniao5shop.widget.CNiaoToolBar>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_ware_detail.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context="cniao5.com.cniao5shop.WareDetailActivity">
<cniao5.com.cniao5shop.widget.CNiaoToolBar
android:id="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:isShowSearchView="false"
app:navigationIcon="@drawable/icon_back_32px"
app:contentInsetEnd="56dp"
app:title="商品详情">
</cniao5.com.cniao5shop.widget.CNiaoToolBar>
<WebView
android:id="@id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_warelist.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_color">
<cniao5.com.cniao5shop.widget.CNiaoToolBar
android:id="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:isShowSearchView="false"
app:navigationIcon="@drawable/icon_back_32px"
app:contentInsetEnd="56dp"
app:title="商品列表">
</cniao5.com.cniao5shop.widget.CNiaoToolBar>
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/customTabLayout"
app:tabGravity="fill"
app:tabMode="fixed"
>
</android.support.design.widget.TabLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:gravity="center_vertical"
android:padding="5dp"
android:background="@color/goldyellow">
<TextView
android:id="@+id/txt_summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/gray"/>
</LinearLayout>
<com.cjj.MaterialRefreshLayout
android:id="@+id/refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:overlay="false"
app:wave_show="false"
app:wave_color="#90ffffff"
app:progress_colors="@array/material_colors"
app:wave_height_type="higher"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</com.cjj.MaterialRefreshLayout>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/fragment_cart.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<cniao5.com.cniao5shop.widget.CNiaoToolBar
android:id="@id/toolbar"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="购物车"
app:rightButtonText="编辑"
android:layout_alignParentTop="true"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"
android:layout_marginBottom="50dp">
</android.support.v7.widget.RecyclerView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:background="#802f4f4f"
android:gravity="center_vertical"
>
<CheckBox
android:id="@+id/checkbox_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:checked="true"
android:text="全选"
style="@style/customCheckbox"/>
<TextView
android:id="@+id/txt_total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/checkbox_all"
android:layout_marginLeft="40dp"
android:layout_centerVertical="true"
android:textSize="30dp"
android:text="合计"/>
<Button
android:id="@+id/btn_order"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:minHeight="60dp"
android:minWidth="120dp"
android:text="去结算"
style="@style/bigRedButton"/>
<Button
android:id="@+id/btn_del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:visibility="gone"
android:minHeight="60dp"
android:minWidth="120dp"
android:text="删除"
style="@style/bigRedButton"/>
</RelativeLayout>
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/fragment_category.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<cniao5.com.cniao5shop.widget.CNiaoToolBar
android:id="@id/toolbar"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:isShowSearchView="false"
app:title="分类"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_category"
android:layout_width="@dimen/category_layout_width"
android:layout_height="fill_parent"
android:background="@color/white"
>
</android.support.v7.widget.RecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginLeft="2dp"
>
<com.daimajia.slider.library.SliderLayout
android:id="@+id/slider"
android:layout_width="match_parent"
android:layout_height="180dp"
app:pager_animation="Accordion"
app:auto_cycle="true"
app:indicator_visibility="visible"
app:pager_animation_span="1100"
/>
<com.cjj.MaterialRefreshLayout
android:id="@+id/refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
app:overlay="false"
app:wave_show="false"
app:progress_colors="@array/material_colors"
app:wave_height_type="higher"
app:progress_show_circle_backgroud="false"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_wares"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</com.cjj.MaterialRefreshLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/fragment_home.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<cniao5.com.cniao5shop.widget.CNiaoToolBar
android:id="@id/toolbar"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:isShowSearchView="true"
/>
<com.daimajia.slider.library.SliderLayout
android:id="@+id/slider"
android:layout_width="match_parent"
app:pager_animation="Accordion"
app:auto_cycle="true"
app:indicator_visibility="visible"
app:pager_animation_span="1100"
android:layout_height="180dp"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
>
</android.support.v7.widget.RecyclerView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/fragment_hot.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<cniao5.com.cniao5shop.widget.CNiaoToolBar
android:id="@id/toolbar"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:isShowSearchView="true"
/>
<com.cjj.MaterialRefreshLayout
android:id="@+id/refresh_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:overlay="true"
app:wave_show="true"
app:wave_color="#90ffffff"
app:progress_colors="@array/material_colors"
app:wave_height_type="higher"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</com.cjj.MaterialRefreshLayout>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/fragment_mine.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="180dp"
android:background="?attr/colorPrimary" >
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/img_head"
android:layout_width="100dp"
and
gitextract_igovmuoh/
├── CNiao5Shop.iml
├── README.md
├── app/
│ ├── .gitignore
│ ├── app.iml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── cniao5/
│ │ └── com/
│ │ └── cniao5shop/
│ │ └── ApplicationTest.java
│ └── main/
│ ├── AndroidManifest.xml
│ ├── assets/
│ │ └── ShareSDK.xml
│ ├── java/
│ │ └── cniao5/
│ │ └── com/
│ │ └── cniao5shop/
│ │ ├── CniaoApplication.java
│ │ ├── Contants.java
│ │ ├── MainActivity.java
│ │ ├── WareDetailActivity.java
│ │ ├── WareListActivity.java
│ │ ├── adapter/
│ │ │ ├── BaseAdapter.java
│ │ │ ├── BaseViewHolder.java
│ │ │ ├── CartAdapter.java
│ │ │ ├── CategoryAdapter.java
│ │ │ ├── HWAdatper.java
│ │ │ ├── HomeCatgoryAdapter.java
│ │ │ ├── HotWaresAdapter.java
│ │ │ ├── SimpleAdapter.java
│ │ │ ├── WaresAdapter.java
│ │ │ └── decoration/
│ │ │ ├── CardViewtemDecortion.java
│ │ │ ├── DividerGridItemDecoration.java
│ │ │ └── DividerItemDecoration.java
│ │ ├── bean/
│ │ │ ├── Banner.java
│ │ │ ├── BaseBean.java
│ │ │ ├── Campaign.java
│ │ │ ├── Category.java
│ │ │ ├── HomeCampaign.java
│ │ │ ├── Page.java
│ │ │ ├── ShoppingCart.java
│ │ │ ├── Tab.java
│ │ │ └── Wares.java
│ │ ├── fragment/
│ │ │ ├── BaseFragment.java
│ │ │ ├── CartFragment.java
│ │ │ ├── CategoryFragment.java
│ │ │ ├── HomeFragment.java
│ │ │ ├── HotFragment.java
│ │ │ └── MineFragment.java
│ │ ├── http/
│ │ │ ├── BaseCallback.java
│ │ │ ├── OkHttpHelper.java
│ │ │ └── SpotsCallBack.java
│ │ ├── utils/
│ │ │ ├── CartProvider.java
│ │ │ ├── JSONUtil.java
│ │ │ ├── Pager.java
│ │ │ ├── PreferencesUtils.java
│ │ │ ├── TimeUtils.java
│ │ │ └── ToastUtils.java
│ │ └── widget/
│ │ ├── CNiaoToolBar.java
│ │ ├── FragmentTabHost.java
│ │ └── NumberAddSubView.java
│ └── res/
│ ├── color/
│ │ ├── grey_btn_text_color.xml
│ │ ├── selector_tab_text.xml
│ │ └── white_color_selector.xml
│ ├── drawable/
│ │ ├── bg_btn_style_green.xml
│ │ ├── bg_btn_style_grey.xml
│ │ ├── bg_btn_style_red.xml
│ │ ├── bg_btn_style_white.xml
│ │ ├── selector_checkbox.xml
│ │ ├── selector_icon_cart.xml
│ │ ├── selector_icon_category.xml
│ │ ├── selector_icon_home.xml
│ │ ├── selector_icon_hot.xml
│ │ ├── selector_icon_mine.xml
│ │ ├── selector_list_item.xml
│ │ ├── selector_number_add_sub.xml
│ │ └── selector_search_view.xml
│ ├── layout/
│ │ ├── activity_main.xml
│ │ ├── activity_test.xml
│ │ ├── activity_ware_detail.xml
│ │ ├── activity_warelist.xml
│ │ ├── fragment_cart.xml
│ │ ├── fragment_category.xml
│ │ ├── fragment_home.xml
│ │ ├── fragment_hot.xml
│ │ ├── fragment_mine.xml
│ │ ├── tab_indicator.xml
│ │ ├── template_cart.xml
│ │ ├── template_grid_wares.xml
│ │ ├── template_home_cardview.xml
│ │ ├── template_home_cardview2.xml
│ │ ├── template_hot_wares.xml
│ │ ├── template_single_text.xml
│ │ ├── toolbar.xml
│ │ └── widet_num_add_sub.xml
│ ├── menu/
│ │ └── menu_main.xml
│ ├── values/
│ │ ├── attr_number_add_sub_view.xml
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── ids.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-1280x768/
│ │ └── dimens.xml
│ └── values-w820dp/
│ └── dimens.xml
├── build/
│ └── intermediates/
│ └── dex-cache/
│ └── cache.xml
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── settings.gradle
└── sharesdk/
├── .gitignore
├── build.gradle
├── libs/
│ ├── MobCommons.jar
│ ├── MobTools.jar
│ ├── ShareSDK-Core-2.6.4.jar
│ ├── ShareSDK-QQ-2.6.4.jar
│ ├── ShareSDK-QZone-2.6.4.jar
│ ├── ShareSDK-SinaWeibo-2.6.4.jar
│ ├── ShareSDK-TencentWeibo-2.6.4.jar
│ ├── ShareSDK-Wechat-2.6.4.jar
│ ├── ShareSDK-Wechat-Core-2.6.4.jar
│ ├── ShareSDK-Wechat-Favorite-2.6.4.jar
│ └── ShareSDK-Wechat-Moments-2.6.4.jar
├── proguard-rules.pro
├── sharesdk.iml
└── src/
├── androidTest/
│ └── java/
│ └── cniao5/
│ └── com/
│ └── sharesdk/
│ └── ApplicationTest.java
└── main/
├── AndroidManifest.xml
├── java/
│ └── cn/
│ └── sharesdk/
│ └── onekeyshare/
│ ├── CustomerLogo.java
│ ├── EditPageFakeActivity.java
│ ├── FollowerListFakeActivity.java
│ ├── OnekeyShare.java
│ ├── OnekeyShareTheme.java
│ ├── PicViewer.java
│ ├── PlatformListFakeActivity.java
│ ├── ReflectableShareContentCustomizeCallback.java
│ ├── Shake2Share.java
│ ├── ShareContentCustomizeCallback.java
│ ├── ShareCore.java
│ ├── ThemeShareCallback.java
│ └── theme/
│ ├── classic/
│ │ ├── EditPage.java
│ │ ├── FollowListPage.java
│ │ ├── PlatformGridView.java
│ │ └── PlatformListPage.java
│ └── skyblue/
│ ├── EditPage.java
│ ├── FollowListPage.java
│ ├── PlatformGridViewAdapter.java
│ └── PlatformListPage.java
└── res/
├── drawable/
│ ├── ssdk_oks_classic_platform_corners_bg.xml
│ ├── ssdk_oks_skyblue_platform_list_item.xml
│ ├── ssdk_oks_skyblue_platform_list_item_selected.xml
│ └── ssdk_oks_skyblue_platform_list_selector.xml
├── drawable-xhdpi/
│ └── ssdk_oks_shake_to_share_back.xml
├── layout/
│ ├── ssdk_oks_skyblue_editpage.xml
│ ├── ssdk_oks_skyblue_editpage_at_layout.xml
│ ├── ssdk_oks_skyblue_editpage_inc_image_layout.xml
│ ├── ssdk_oks_skyblue_share_actionbar.xml
│ ├── ssdk_oks_skyblue_share_platform_list.xml
│ └── ssdk_oks_skyblue_share_platform_list_item.xml
├── values/
│ ├── ssdk_instapaper_strings.xml
│ ├── ssdk_oks_strings.xml
│ └── ssdk_strings.xml
└── values-en/
├── ssdk_oks_strings.xml
└── ssdk_strings.xml
SYMBOL INDEX (714 symbols across 66 files)
FILE: app/src/androidTest/java/cniao5/com/cniao5shop/ApplicationTest.java
class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
method ApplicationTest (line 10) | public ApplicationTest() {
FILE: app/src/main/java/cniao5/com/cniao5shop/CniaoApplication.java
class CniaoApplication (line 11) | public class CniaoApplication extends Application {
method onCreate (line 13) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/Contants.java
class Contants (line 4) | public class Contants {
class API (line 12) | public static class API{
FILE: app/src/main/java/cniao5/com/cniao5shop/MainActivity.java
class MainActivity (line 24) | public class MainActivity extends AppCompatActivity {
method onCreate (line 35) | @Override
method initTab (line 46) | private void initTab() {
method refData (line 96) | private void refData(){
method buildIndicator (line 113) | private View buildIndicator(Tab tab){
FILE: app/src/main/java/cniao5/com/cniao5shop/WareDetailActivity.java
class WareDetailActivity (line 25) | public class WareDetailActivity extends AppCompatActivity implements Vie...
method onCreate (line 42) | @Override
method initWebView (line 67) | private void initWebView(){
method initToolBar (line 87) | private void initToolBar(){
method showShare (line 104) | private void showShare() {
method onDestroy (line 142) | @Override
method onClick (line 149) | @Override
class WC (line 156) | class WC extends WebViewClient{
method onPageFinished (line 159) | @Override
class WebAppInterface (line 176) | class WebAppInterface{
method WebAppInterface (line 180) | public WebAppInterface(Context context){
method showDetail (line 184) | @JavascriptInterface
method buy (line 199) | @JavascriptInterface
method addFavorites (line 207) | @JavascriptInterface
FILE: app/src/main/java/cniao5/com/cniao5shop/WareListActivity.java
class WareListActivity (line 34) | public class WareListActivity extends AppCompatActivity implements Page...
method onCreate (line 76) | @Override
method initToolBar (line 95) | private void initToolBar(){
method getData (line 115) | private void getData(){
method initTab (line 132) | private void initTab(){
method load (line 162) | @Override
method refresh (line 190) | @Override
method loadMore (line 197) | @Override
method onTabSelected (line 203) | @Override
method onTabUnselected (line 211) | @Override
method onTabReselected (line 216) | @Override
method onClick (line 221) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/BaseAdapter.java
class BaseAdapter (line 17) | public abstract class BaseAdapter<T,H extends BaseViewHolder> extends R...
type OnItemClickListener (line 34) | public interface OnItemClickListener {
method onItemClick (line 35) | void onItemClick(View view, int position);
method BaseAdapter (line 40) | public BaseAdapter(Context context, int layoutResId) {
method BaseAdapter (line 45) | public BaseAdapter(Context context, int layoutResId, List<T> datas) {
method onCreateViewHolder (line 54) | @Override
method onBindViewHolder (line 61) | @Override
method getItemCount (line 69) | @Override
method getItem (line 78) | public T getItem(int position) {
method clear (line 84) | public void clear(){
method removeItem (line 102) | public void removeItem(T t){
method getDatas (line 112) | public List<T> getDatas(){
method addData (line 120) | public void addData(List<T> datas){
method addData (line 125) | public void addData(int position,List<T> list){
method refreshData (line 139) | public void refreshData(List<T> list){
method loadMoreData (line 153) | public void loadMoreData(List<T> list){
method convert (line 175) | protected abstract void convert(H viewHoder, T item);
method setOnItemClickListener (line 180) | public void setOnItemClickListener(OnItemClickListener listener) {
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/BaseViewHolder.java
class BaseViewHolder (line 14) | public class BaseViewHolder extends RecyclerView.ViewHolder implements V...
method BaseViewHolder (line 21) | public BaseViewHolder(View itemView,BaseAdapter.OnItemClickListener on...
method getTextView (line 29) | public TextView getTextView(int viewId) {
method getButton (line 33) | public Button getButton(int viewId) {
method getImageView (line 37) | public ImageView getImageView(int viewId) {
method getView (line 41) | public View getView(int viewId) {
method retrieveView (line 46) | protected <T extends View> T retrieveView(int viewId) {
method onClick (line 55) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/CartAdapter.java
class CartAdapter (line 25) | public class CartAdapter extends SimpleAdapter<ShoppingCart> implements ...
method CartAdapter (line 40) | public CartAdapter(Context context, List<ShoppingCart> datas, final Ch...
method convert (line 56) | @Override
method getTotalPrice (line 96) | private float getTotalPrice(){
method showTotalPrice (line 113) | public void showTotalPrice(){
method isNull (line 122) | private boolean isNull(){
method onItemClick (line 128) | @Override
method checkListen (line 141) | private void checkListen() {
method checkAll_None (line 166) | public void checkAll_None(boolean isChecked){
method delCart (line 185) | public void delCart(){
method setTextView (line 223) | public void setTextView(TextView textview){
method setCheckBox (line 227) | public void setCheckBox(CheckBox ck){
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/CategoryAdapter.java
class CategoryAdapter (line 14) | public class CategoryAdapter extends SimpleAdapter<Category> {
method CategoryAdapter (line 17) | public CategoryAdapter(Context context, List<Category> datas) {
method convert (line 21) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/HWAdatper.java
class HWAdatper (line 21) | public class HWAdatper extends SimpleAdapter<Wares> {
method HWAdatper (line 26) | public HWAdatper(Context context, List<Wares> datas) {
method convert (line 32) | @Override
method resetLayout (line 58) | public void resetLayout(int layoutId){
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/HomeCatgoryAdapter.java
class HomeCatgoryAdapter (line 25) | public class HomeCatgoryAdapter extends RecyclerView.Adapter<HomeCatgory...
method HomeCatgoryAdapter (line 44) | public HomeCatgoryAdapter(List<HomeCampaign> datas,Context context){
method setOnCampaignClickListener (line 51) | public void setOnCampaignClickListener(OnCampaignClickListener listener){
method onCreateViewHolder (line 56) | @Override
method onBindViewHolder (line 69) | @Override
method getItemCount (line 82) | @Override
method getItemViewType (line 88) | @Override
class ViewHolder (line 99) | class ViewHolder extends RecyclerView.ViewHolder implements View.OnCli...
method ViewHolder (line 107) | public ViewHolder(View itemView) {
method onClick (line 122) | @Override
method anim (line 135) | private void anim(final View v){
type OnCampaignClickListener (line 168) | public interface OnCampaignClickListener{
method onClick (line 171) | void onClick(View view,Campaign campaign);
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/HotWaresAdapter.java
class HotWaresAdapter (line 21) | public class HotWaresAdapter extends RecyclerView.Adapter<HotWaresAdapte...
method HotWaresAdapter (line 29) | public HotWaresAdapter(List<Wares> wares){
method onCreateViewHolder (line 37) | @Override
method onBindViewHolder (line 44) | @Override
method getData (line 57) | public Wares getData(int position){
method getDatas (line 63) | public List<Wares> getDatas(){
method clearData (line 67) | public void clearData(){
method addData (line 73) | public void addData(List<Wares> datas){
method addData (line 78) | public void addData(int position,List<Wares> datas){
method getItemCount (line 89) | @Override
class ViewHolder (line 100) | class ViewHolder extends RecyclerView.ViewHolder{
method ViewHolder (line 108) | public ViewHolder(View itemView) {
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/SimpleAdapter.java
class SimpleAdapter (line 11) | public abstract class SimpleAdapter<T> extends BaseAdapter<T,BaseViewHol...
method SimpleAdapter (line 13) | public SimpleAdapter(Context context, int layoutResId) {
method SimpleAdapter (line 17) | public SimpleAdapter(Context context, int layoutResId, List<T> datas) {
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/WaresAdapter.java
class WaresAdapter (line 15) | public class WaresAdapter extends SimpleAdapter<Wares> {
method WaresAdapter (line 19) | public WaresAdapter(Context context, List<Wares> datas) {
method convert (line 23) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/CardViewtemDecortion.java
class CardViewtemDecortion (line 10) | public class CardViewtemDecortion extends RecyclerView.ItemDecoration {
method onDraw (line 12) | @Override
method onDrawOver (line 17) | @Override
method getItemOffsets (line 22) | @Override
method getOrientation (line 35) | private int getOrientation(RecyclerView parent) {
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/DividerGridItemDecoration.java
class DividerGridItemDecoration (line 20) | public class DividerGridItemDecoration extends RecyclerView.ItemDecoration
method DividerGridItemDecoration (line 26) | public DividerGridItemDecoration(Context context)
method onDraw (line 33) | @Override
method getSpanCount (line 42) | private int getSpanCount(RecyclerView parent)
method drawHorizontal (line 59) | public void drawHorizontal(Canvas c, RecyclerView parent)
method drawVertical (line 77) | public void drawVertical(Canvas c, RecyclerView parent)
method isLastColum (line 96) | private boolean isLastColum(RecyclerView parent, int pos, int spanCount,
method isLastRaw (line 126) | private boolean isLastRaw(RecyclerView parent, int pos, int spanCount,
method getItemOffsets (line 159) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/DividerItemDecoration.java
class DividerItemDecoration (line 13) | public class DividerItemDecoration extends RecyclerView.ItemDecoration {
method DividerItemDecoration (line 27) | public DividerItemDecoration(Context context, int orientation) {
method setOrientation (line 34) | public void setOrientation(int orientation) {
method onDraw (line 41) | @Override
method drawVertical (line 53) | public void drawVertical(Canvas c, RecyclerView parent) {
method drawHorizontal (line 70) | public void drawHorizontal(Canvas c, RecyclerView parent) {
method getItemOffsets (line 86) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Banner.java
class Banner (line 6) | public class Banner extends BaseBean {
method getName (line 14) | public String getName() {
method setName (line 18) | public void setName(String name) {
method getImgUrl (line 22) | public String getImgUrl() {
method setImgUrl (line 26) | public void setImgUrl(String imgUrl) {
method getDescription (line 30) | public String getDescription() {
method setDescription (line 34) | public void setDescription(String description) {
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/BaseBean.java
class BaseBean (line 8) | public class BaseBean implements Serializable {
method getId (line 13) | public long getId() {
method setId (line 17) | public void setId(long id) {
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Campaign.java
class Campaign (line 12) | public class Campaign implements Serializable {
method getId (line 20) | public Long getId() {
method setId (line 23) | public void setId(Long id) {
method getTitle (line 28) | public String getTitle() {
method setTitle (line 32) | public void setTitle(String title) {
method getImgUrl (line 36) | public String getImgUrl() {
method setImgUrl (line 40) | public void setImgUrl(String imgUrl) {
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Category.java
class Category (line 5) | public class Category extends BaseBean {
method Category (line 8) | public Category() {
method Category (line 11) | public Category(String name) {
method Category (line 16) | public Category(long id ,String name) {
method getName (line 21) | public String getName() {
method setName (line 25) | public void setName(String name) {
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/HomeCampaign.java
class HomeCampaign (line 15) | public class HomeCampaign implements Serializable {
method getCpOne (line 25) | public Campaign getCpOne() {
method setCpOne (line 29) | public void setCpOne(Campaign cpOne) {
method getCpTwo (line 33) | public Campaign getCpTwo() {
method setCpTwo (line 37) | public void setCpTwo(Campaign cpTwo) {
method getCpThree (line 41) | public Campaign getCpThree() {
method setCpThree (line 45) | public void setCpThree(Campaign cpThree) {
method getId (line 50) | public Long getId() {
method setId (line 54) | public void setId(Long id) {
method getTitle (line 58) | public String getTitle() {
method setTitle (line 62) | public void setTitle(String title) {
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Page.java
class Page (line 9) | public class Page<T> {
method getCurrentPage (line 20) | public int getCurrentPage() {
method setCurrentPage (line 24) | public void setCurrentPage(int currentPage) {
method getPageSize (line 28) | public int getPageSize() {
method setPageSize (line 32) | public void setPageSize(int pageSize) {
method getTotalPage (line 36) | public int getTotalPage() {
method setTotalPage (line 40) | public void setTotalPage(int totalPage) {
method getTotalCount (line 44) | public int getTotalCount() {
method setTotalCount (line 48) | public void setTotalCount(int totalCount) {
method getList (line 52) | public List<T> getList() {
method setList (line 56) | public void setList(List<T> list) {
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/ShoppingCart.java
class ShoppingCart (line 9) | public class ShoppingCart extends Wares implements Serializable {
method getCount (line 17) | public int getCount() {
method setCount (line 21) | public void setCount(int count) {
method isChecked (line 25) | public boolean isChecked() {
method setIsChecked (line 29) | public void setIsChecked(boolean isChecked) {
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Tab.java
class Tab (line 6) | public class Tab {
method Tab (line 12) | public Tab(Class fragment,int title, int icon) {
method getTitle (line 18) | public int getTitle() {
method setTitle (line 22) | public void setTitle(int title) {
method getIcon (line 26) | public int getIcon() {
method setIcon (line 30) | public void setIcon(int icon) {
method getFragment (line 34) | public Class getFragment() {
method setFragment (line 38) | public void setFragment(Class fragment) {
FILE: app/src/main/java/cniao5/com/cniao5shop/bean/Wares.java
class Wares (line 9) | public class Wares implements Serializable {
method getId (line 19) | public Long getId() {
method setId (line 23) | public void setId(Long id) {
method getName (line 27) | public String getName() {
method setName (line 31) | public void setName(String name) {
method getImgUrl (line 35) | public String getImgUrl() {
method setImgUrl (line 39) | public void setImgUrl(String imgUrl) {
method getDescription (line 43) | public String getDescription() {
method setDescription (line 47) | public void setDescription(String description) {
method getPrice (line 51) | public Float getPrice() {
method setPrice (line 55) | public void setPrice(Float price) {
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/BaseFragment.java
class BaseFragment (line 16) | public abstract class BaseFragment extends Fragment {
method onCreateView (line 22) | @Nullable
method initToolBar (line 37) | public void initToolBar(){
method createView (line 42) | public abstract View createView(LayoutInflater inflater, ViewGroup con...
method init (line 44) | public abstract void init();
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/CartFragment.java
class CartFragment (line 24) | public class CartFragment extends BaseFragment implements View.OnClickLi...
method createView (line 55) | @Override
method init (line 61) | @Override
method delCart (line 71) | @OnClick(R.id.btn_del)
method showData (line 78) | private void showData(){
method refData (line 94) | public void refData(){
method changeToolbar (line 108) | public void changeToolbar(){
method showDelControl (line 124) | private void showDelControl(){
method hideDelControl (line 136) | private void hideDelControl(){
method onClick (line 153) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/CategoryFragment.java
class CategoryFragment (line 41) | public class CategoryFragment extends BaseFragment {
method createView (line 82) | @Override
method init (line 87) | @Override
method initRefreshLayout (line 97) | private void initRefreshLayout(){
method refreshData (line 122) | private void refreshData(){
method loadMoreData (line 131) | private void loadMoreData(){
method requestCategoryData (line 140) | private void requestCategoryData(){
method showCategoryData (line 165) | private void showCategoryData(List<Category> categories){
method requestBannerData (line 198) | private void requestBannerData( ) {
method showSliderViews (line 223) | private void showSliderViews(List<Banner> banners){
method requestWares (line 257) | private void requestWares(long categoryId){
method showWaresData (line 300) | private void showWaresData(List<Wares> wares){
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/HomeFragment.java
class HomeFragment (line 35) | public class HomeFragment extends BaseFragment {
method createView (line 61) | @Override
method init (line 66) | @Override
method requestImages (line 75) | private void requestImages(){
method initRecyclerView (line 102) | private void initRecyclerView() {
method initData (line 137) | private void initData(List<HomeCampaign> homeCampaigns){
method initSlider (line 166) | private void initSlider(){
method onDestroy (line 199) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/HotFragment.java
class HotFragment (line 28) | public class HotFragment extends BaseFragment implements Pager.OnPageLis...
method createView (line 43) | @Override
method init (line 48) | @Override
method load (line 65) | @Override
method refresh (line 93) | @Override
method loadMore (line 100) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/fragment/MineFragment.java
class MineFragment (line 14) | public class MineFragment extends BaseFragment{
method createView (line 18) | @Override
method init (line 23) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/http/BaseCallback.java
class BaseCallback (line 13) | public abstract class BaseCallback <T> {
method getSuperclassTypeParameter (line 18) | static Type getSuperclassTypeParameter(Class<?> subclass)
method BaseCallback (line 30) | public BaseCallback()
method onBeforeRequest (line 37) | public abstract void onBeforeRequest(Request request);
method onFailure (line 40) | public abstract void onFailure(Request request, Exception e) ;
method onResponse (line 47) | public abstract void onResponse(Response response);
method onSuccess (line 56) | public abstract void onSuccess(Response response,T t) ;
method onError (line 64) | public abstract void onError(Response response, int code,Exception e) ;
FILE: app/src/main/java/cniao5/com/cniao5shop/http/OkHttpHelper.java
class OkHttpHelper (line 21) | public class OkHttpHelper {
method OkHttpHelper (line 42) | private OkHttpHelper(){
method getInstance (line 55) | public static OkHttpHelper getInstance(){
method get (line 62) | public void get(String url,BaseCallback callback){
method post (line 72) | public void post(String url,Map<String,String> param, BaseCallback cal...
method request (line 82) | public void request(final Request request,final BaseCallback callback){
method callbackSuccess (line 131) | private void callbackSuccess(final BaseCallback callback , final Resp...
method callbackError (line 142) | private void callbackError(final BaseCallback callback , final Respon...
method callbackFailure (line 154) | private void callbackFailure(final BaseCallback callback , final Requ...
method callbackResponse (line 165) | private void callbackResponse(final BaseCallback callback , final Res...
method buildPostRequest (line 177) | private Request buildPostRequest(String url,Map<String,String> params){
method buildGetRequest (line 182) | private Request buildGetRequest(String url){
method buildRequest (line 187) | private Request buildRequest(String url,HttpMethodType methodType,Map...
method builderFormData (line 207) | private RequestBody builderFormData(Map<String,String> params){
type HttpMethodType (line 226) | enum HttpMethodType{
FILE: app/src/main/java/cniao5/com/cniao5shop/http/SpotsCallBack.java
class SpotsCallBack (line 11) | public abstract class SpotsCallBack<T> extends BaseCallback<T> {
method SpotsCallBack (line 18) | public SpotsCallBack(Context context){
method initSpotsDialog (line 27) | private void initSpotsDialog(){
method showDialog (line 33) | public void showDialog(){
method dismissDialog (line 37) | public void dismissDialog(){
method setLoadMessage (line 42) | public void setLoadMessage(int resId){
method onFailure (line 47) | @Override
method onBeforeRequest (line 52) | @Override
method onResponse (line 58) | @Override
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/CartProvider.java
class CartProvider (line 18) | public class CartProvider {
method CartProvider (line 30) | public CartProvider(Context context){
method put (line 40) | public void put(ShoppingCart cart){
method put (line 60) | public void put(Wares wares){
method update (line 67) | public void update(ShoppingCart cart){
method delete (line 73) | public void delete(ShoppingCart cart){
method getAll (line 78) | public List<ShoppingCart> getAll(){
method commit (line 84) | public void commit(){
method sparseToList (line 94) | private List<ShoppingCart> sparseToList(){
method listToSparse (line 110) | private void listToSparse(){
method getDataFromLocal (line 127) | public List<ShoppingCart> getDataFromLocal(){
method convertData (line 142) | public ShoppingCart convertData(Wares item){
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/JSONUtil.java
class JSONUtil (line 19) | public class JSONUtil {
method getGson (line 26) | public static Gson getGson(){
method fromJson (line 32) | public static <T> T fromJson(String json,Class<T> clz){
method fromJson (line 38) | public static <T> T fromJson(String json,Type type){
method toJSON (line 44) | public static String toJSON(Object object){
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/Pager.java
class Pager (line 24) | public class Pager {
method Pager (line 42) | private Pager(){
method newBuilder (line 50) | public static Builder newBuilder(){
method request (line 57) | public void request(){
method putParam (line 62) | public void putParam(String key,Object value){
method initRefreshLayout (line 70) | private void initRefreshLayout(){
method requestData (line 100) | private void requestData(){
method showData (line 112) | private <T> void showData(List<T> datas,int totalPage,int totalCount){
method refresh (line 147) | private void refresh(){
method loadMore (line 157) | private void loadMore(){
method buildUrl (line 169) | private String buildUrl(){
method buildUrlParams (line 175) | private String buildUrlParams() {
class Builder (line 201) | public static class Builder{
method setUrl (line 221) | public Builder setUrl(String url){
method setPageSize (line 228) | public Builder setPageSize(int pageSize){
method putParam (line 233) | public Builder putParam(String key,Object value){
method setLoadMore (line 238) | public Builder setLoadMore(boolean loadMore){
method setRefreshLayout (line 243) | public Builder setRefreshLayout(MaterialRefreshLayout refreshLayout){
method setOnPageListener (line 250) | public Builder setOnPageListener(OnPageListener onPageListener) {
method build (line 256) | public Pager build(Context context, Type type){
method valid (line 270) | private void valid(){
class RequestCallBack (line 288) | class RequestCallBack<T> extends SpotsCallBack<Page<T>>{
method RequestCallBack (line 290) | public RequestCallBack(Context context) {
method onFailure (line 296) | @Override
method onSuccess (line 311) | @Override
method onError (line 328) | @Override
type OnPageListener (line 346) | public interface OnPageListener<T>{
method load (line 349) | void load(List<T> datas,int totalPage,int totalCount);
method refresh (line 351) | void refresh(List<T> datas,int totalPage,int totalCount);
method loadMore (line 353) | void loadMore(List<T> datas,int totalPage,int totalCount);
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/PreferencesUtils.java
class PreferencesUtils (line 31) | public class PreferencesUtils {
method putString (line 43) | public static boolean putString(Context context, String key, String va...
method getString (line 59) | public static String getString(Context context, String key) {
method getString (line 72) | public static String getString(Context context, String key, String def...
method putInt (line 85) | public static boolean putInt(Context context, String key, int value) {
method getInt (line 101) | public static int getInt(Context context, String key) {
method getInt (line 114) | public static int getInt(Context context, String key, int defaultValue) {
method putLong (line 127) | public static boolean putLong(Context context, String key, long value) {
method getLong (line 143) | public static long getLong(Context context, String key) {
method getLong (line 156) | public static long getLong(Context context, String key, long defaultVa...
method putFloat (line 169) | public static boolean putFloat(Context context, String key, float valu...
method getFloat (line 185) | public static float getFloat(Context context, String key) {
method getFloat (line 198) | public static float getFloat(Context context, String key, float defaul...
method putBoolean (line 211) | public static boolean putBoolean(Context context, String key, boolean ...
method getBoolean (line 227) | public static boolean getBoolean(Context context, String key) {
method getBoolean (line 240) | public static boolean getBoolean(Context context, String key, boolean ...
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/TimeUtils.java
class TimeUtils (line 10) | public class TimeUtils {
method getTime (line 22) | public static String getTime(long timeInMillis, SimpleDateFormat dateF...
method getTime (line 32) | public static String getTime(long timeInMillis) {
method getCurrentTimeInLong (line 41) | public static long getCurrentTimeInLong() {
method getCurrentTimeInString (line 50) | public static String getCurrentTimeInString() {
method getCurrentTimeInString (line 59) | public static String getCurrentTimeInString(SimpleDateFormat dateForma...
FILE: app/src/main/java/cniao5/com/cniao5shop/utils/ToastUtils.java
class ToastUtils (line 11) | public class ToastUtils {
method show (line 13) | public static void show(Context context, int resId) {
method show (line 17) | public static void show(Context context, int resId, int duration) {
method show (line 21) | public static void show(Context context, CharSequence text) {
method show (line 25) | public static void show(Context context, CharSequence text, int durati...
method show (line 29) | public static void show(Context context, int resId, Object... args) {
method show (line 33) | public static void show(Context context, String format, Object... args) {
method show (line 37) | public static void show(Context context, int resId, int duration, Obje...
method show (line 41) | public static void show(Context context, String format, int duration, ...
FILE: app/src/main/java/cniao5/com/cniao5shop/widget/CNiaoToolBar.java
class CNiaoToolBar (line 22) | public class CNiaoToolBar extends Toolbar {
method CNiaoToolBar (line 34) | public CNiaoToolBar(Context context) {
method CNiaoToolBar (line 38) | public CNiaoToolBar(Context context, AttributeSet attrs) {
method CNiaoToolBar (line 42) | public CNiaoToolBar(Context context, AttributeSet attrs, int defStyleA...
method initView (line 88) | private void initView() {
method setRightButtonIcon (line 112) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
method setRightButtonIcon (line 123) | public void setRightButtonIcon(int icon){
method setRightButtonOnClickListener (line 129) | public void setRightButtonOnClickListener(OnClickListener li){
method setRightButtonText (line 134) | public void setRightButtonText(CharSequence text){
method setRightButtonText (line 139) | public void setRightButtonText(int id){
method getRightButton (line 145) | public Button getRightButton(){
method setTitle (line 152) | @Override
method setTitle (line 158) | @Override
method showSearchView (line 175) | public void showSearchView(){
method hideSearchView (line 183) | public void hideSearchView(){
method showTitleView (line 188) | public void showTitleView(){
method hideTitleView (line 194) | public void hideTitleView() {
FILE: app/src/main/java/cniao5/com/cniao5shop/widget/FragmentTabHost.java
class FragmentTabHost (line 66) | public class FragmentTabHost extends TabHost implements
class TabInfo (line 77) | static final class TabInfo {
method TabInfo (line 83) | TabInfo(String _tag, Class<?> _class, Bundle _args) {
class DummyTabFactory (line 90) | static class DummyTabFactory implements TabContentFactory {
method DummyTabFactory (line 93) | public DummyTabFactory(Context context) {
method createTabContent (line 97) | @Override
class SavedState (line 106) | static class SavedState extends BaseSavedState {
method SavedState (line 109) | SavedState(Parcelable superState) {
method SavedState (line 113) | private SavedState(Parcel in) {
method writeToParcel (line 118) | @Override
method toString (line 124) | @Override
method createFromParcel (line 132) | public SavedState createFromParcel(Parcel in) {
method newArray (line 136) | public SavedState[] newArray(int size) {
method FragmentTabHost (line 142) | public FragmentTabHost(Context context) {
method FragmentTabHost (line 149) | public FragmentTabHost(Context context, AttributeSet attrs) {
method initFragmentTabHost (line 154) | private void initFragmentTabHost(Context context, AttributeSet attrs) {
method ensureHierarchy (line 163) | private void ensureHierarchy(Context context) {
method setup (line 196) | @Override
method setup (line 203) | public void setup(Context context, FragmentManager manager) {
method setup (line 211) | public void setup(Context context, FragmentManager manager, int contai...
method ensureContent (line 227) | private void ensureContent() {
method setOnTabChangedListener (line 238) | @Override
method addTab (line 243) | public void addTab(TabSpec tabSpec, Class<?> clss, Bundle args) {
method onAttachedToWindow (line 266) | @Override
method onDetachedFromWindow (line 307) | @Override
method onSaveInstanceState (line 313) | @Override
method onRestoreInstanceState (line 321) | @Override
method onTabChanged (line 328) | @Override
method doTabChanged (line 341) | private FragmentTransaction doTabChanged(String tabId,
FILE: app/src/main/java/cniao5/com/cniao5shop/widget/NumberAddSubView.java
class NumberAddSubView (line 23) | public class NumberAddSubView extends LinearLayout implements View.OnCli...
method NumberAddSubView (line 47) | public NumberAddSubView(Context context) {
method NumberAddSubView (line 51) | public NumberAddSubView(Context context, AttributeSet attrs) {
method NumberAddSubView (line 55) | public NumberAddSubView(Context context, AttributeSet attrs, int defSt...
method initView (line 98) | private void initView(){
method onClick (line 121) | @Override
method numAdd (line 141) | private void numAdd(){
method numSub (line 153) | private void numSub(){
method getValue (line 165) | public int getValue(){
method setValue (line 175) | public void setValue(int value) {
method setMaxValue (line 183) | public void setMaxValue(int maxValue) {
method setMinValue (line 187) | public void setMinValue(int minValue) {
method setEditTextBackground (line 192) | public void setEditTextBackground(Drawable drawable){
method setEditTextBackground (line 199) | public void setEditTextBackground(int drawableId){
method setButtonAddBackgroud (line 206) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
method setButtonSubBackgroud (line 212) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
method setOnButtonClickListener (line 218) | public void setOnButtonClickListener(OnButtonClickListener onButtonCli...
type OnButtonClickListener (line 222) | public interface OnButtonClickListener{
method onButtonAddClick (line 224) | public void onButtonAddClick(View view, int value);
method onButtonSubClick (line 225) | public void onButtonSubClick(View view, int value);
FILE: sharesdk/src/androidTest/java/cniao5/com/sharesdk/ApplicationTest.java
class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
method ApplicationTest (line 10) | public ApplicationTest() {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/CustomerLogo.java
class CustomerLogo (line 15) | public class CustomerLogo {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/EditPageFakeActivity.java
class EditPageFakeActivity (line 28) | public class EditPageFakeActivity extends FakeActivity {
class ImageInfo (line 39) | public static class ImageInfo {
type ImageListResultsCallback (line 45) | protected static interface ImageListResultsCallback {
method onFinish (line 46) | void onFinish(ArrayList<ImageInfo> results);
method setShareData (line 49) | public void setShareData(HashMap<String, Object> data) {
method setDialogMode (line 54) | public void setDialogMode() {
method setBackgroundView (line 61) | public void setBackgroundView(View bgView) {
method setPlatforms (line 65) | public void setPlatforms(List<Platform> supportEditPagePlatforms) {
method getLogoName (line 69) | public String getLogoName(String platform) {
method isShowAtUserLayout (line 78) | protected boolean isShowAtUserLayout(String platformName) {
method getAtUserButtonText (line 84) | protected String getAtUserButtonText(String platform) {
method getJoinSelectedUser (line 88) | protected String getJoinSelectedUser(HashMap<String, Object> data) {
method haveImage (line 106) | public boolean haveImage(){
method initImageList (line 125) | protected boolean initImageList(ImageListResultsCallback callback) {
method removeImage (line 196) | protected void removeImage(ImageInfo imageInfo) {
method setResultAndFinish (line 202) | protected void setResultAndFinish() {
method onFinish (line 250) | @Override
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/FollowerListFakeActivity.java
class FollowerListFakeActivity (line 9) | public class FollowerListFakeActivity extends FakeActivity {
method setPlatform (line 12) | public void setPlatform(Platform platform) {
method getPlatform (line 16) | public Platform getPlatform() {
method isRadioMode (line 20) | public boolean isRadioMode(String platformName) {
method setResultForChecked (line 24) | public void setResultForChecked(ArrayList<String> checked) {
class Following (line 31) | public static class Following {
class FollowersResult (line 41) | public static class FollowersResult {
method parseFollowers (line 46) | public static FollowersResult parseFollowers(String platformName, Hash...
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/OnekeyShare.java
class OnekeyShare (line 39) | public class OnekeyShare implements PlatformActionListener, Callback {
method OnekeyShare (line 59) | public OnekeyShare() {
method show (line 66) | public void show(Context context) {
method setTheme (line 129) | public void setTheme(OnekeyShareTheme theme) {
method setAddress (line 134) | public void setAddress(String address) {
method setTitle (line 142) | public void setTitle(String title) {
method setTitleUrl (line 147) | public void setTitleUrl(String titleUrl) {
method setText (line 152) | public void setText(String text) {
method getText (line 157) | public String getText() {
method setImagePath (line 162) | public void setImagePath(String imagePath) {
method setImageUrl (line 168) | public void setImageUrl(String imageUrl) {
method setUrl (line 174) | public void setUrl(String url) {
method setFilePath (line 179) | public void setFilePath(String filePath) {
method setComment (line 184) | public void setComment(String comment) {
method setSite (line 189) | public void setSite(String site) {
method setSiteUrl (line 194) | public void setSiteUrl(String siteUrl) {
method setVenueName (line 199) | public void setVenueName(String venueName) {
method setVenueDescription (line 204) | public void setVenueDescription(String venueDescription) {
method setLatitude (line 209) | public void setLatitude(float latitude) {
method setLongitude (line 214) | public void setLongitude(float longitude) {
method setSilent (line 219) | public void setSilent(boolean silent) {
method setPlatform (line 224) | public void setPlatform(String platform) {
method setInstallUrl (line 229) | public void setInstallUrl(String installurl) {
method setExecuteUrl (line 234) | public void setExecuteUrl(String executeurl) {
method setMusicUrl (line 239) | public void setMusicUrl(String musicUrl) {
method setCallback (line 244) | public void setCallback(PlatformActionListener callback) {
method getCallback (line 249) | public PlatformActionListener getCallback() {
method setShareContentCustomizeCallback (line 254) | public void setShareContentCustomizeCallback(ShareContentCustomizeCall...
method getShareContentCustomizeCallback (line 259) | public ShareContentCustomizeCallback getShareContentCustomizeCallback() {
method setCustomerLogo (line 264) | public void setCustomerLogo(Bitmap enableLogo,Bitmap disableLogo, Stri...
method disableSSOWhenAuthorize (line 274) | public void disableSSOWhenAuthorize() {
method shareVideoToWechat (line 279) | public void shareVideoToWechat() {
method setDialogMode (line 284) | public void setDialogMode() {
method addHiddenPlatform (line 290) | public void addHiddenPlatform(String platform) {
method setViewToShare (line 295) | public void setViewToShare(View viewToShare) {
method setImageArray (line 305) | public void setImageArray(String[] imageArray) {
method setEditPageBackground (line 309) | public void setEditPageBackground(View bgView) {
method setOnShareButtonClickListener (line 313) | public void setOnShareButtonClickListener(PlatformListFakeActivity.OnS...
method share (line 318) | public void share(HashMap<Platform, HashMap<String, Object>> shareData) {
method onComplete (line 489) | public void onComplete(Platform platform, int action,
method onError (line 499) | public void onError(Platform platform, int action, Throwable t) {
method onCancel (line 513) | public void onCancel(Platform platform, int action) {
method handleMessage (line 525) | public boolean handleMessage(Message msg) {
method showNotification (line 614) | private void showNotification(String text) {
method setShareFromQQAuthSupport (line 619) | public void setShareFromQQAuthSupport(boolean shareFromQQLogin)
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/OnekeyShareTheme.java
type OnekeyShareTheme (line 3) | public enum OnekeyShareTheme {CLASSIC, SKYBLUE}
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/PicViewer.java
class PicViewer (line 26) | public class PicViewer extends FakeActivity implements OnTouchListener {
method setImageBitmap (line 54) | public void setImageBitmap(Bitmap pic) {
method onCreate (line 61) | public void onCreate() {
method onTouch (line 83) | public boolean onTouch(View v, MotionEvent event) {
method CheckView (line 129) | private void CheckView() {
method minZoom (line 148) | private void minZoom() {
method center (line 156) | private void center() {
method center (line 163) | protected void center(boolean horizontal, boolean vertical) {
method spacing (line 203) | private float spacing(MotionEvent event) {
method midPoint (line 212) | private void midPoint(PointF point, MotionEvent event) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/PlatformListFakeActivity.java
class PlatformListFakeActivity (line 16) | public class PlatformListFakeActivity extends FakeActivity {
type OnShareButtonClickListener (line 28) | public static interface OnShareButtonClickListener {
method onClick (line 29) | void onClick(View v, List<Object> checkPlatforms);
method onCreate (line 32) | public void onCreate() {
method onKeyEvent (line 42) | public boolean onKeyEvent(int keyCode, KeyEvent event) {
method setCanceled (line 49) | protected void setCanceled(boolean canceled) {
method onFinish (line 53) | public boolean onFinish() {
method show (line 63) | @Override
method getShareParamsMap (line 68) | public HashMap<String, Object> getShareParamsMap() {
method setShareParamsMap (line 72) | public void setShareParamsMap(HashMap<String, Object> shareParamsMap) {
method isSilent (line 76) | public boolean isSilent() {
method setSilent (line 80) | public void setSilent(boolean silent) {
method getCustomerLogos (line 84) | public ArrayList<CustomerLogo> getCustomerLogos() {
method setCustomerLogos (line 88) | public void setCustomerLogos(ArrayList<CustomerLogo> customerLogos) {
method getHiddenPlatforms (line 92) | public HashMap<String, String> getHiddenPlatforms() {
method setHiddenPlatforms (line 96) | public void setHiddenPlatforms(HashMap<String, String> hiddenPlatforms) {
method getBackgroundView (line 100) | public View getBackgroundView() {
method setBackgroundView (line 104) | public void setBackgroundView(View backgroundView) {
method getOnShareButtonClickListener (line 108) | public OnShareButtonClickListener getOnShareButtonClickListener() {
method setOnShareButtonClickListener (line 112) | public void setOnShareButtonClickListener(OnShareButtonClickListener o...
method isDialogMode (line 116) | public boolean isDialogMode() {
method setDialogMode (line 120) | public void setDialogMode(boolean dialogMode) {
method getThemeShareCallback (line 124) | public ThemeShareCallback getThemeShareCallback() {
method setThemeShareCallback (line 128) | public void setThemeShareCallback(ThemeShareCallback themeShareCallbac...
method onShareButtonClick (line 132) | protected void onShareButtonClick(View v, List<Object> checkedPlatform...
method showEditPage (line 174) | protected void showEditPage(List<Platform> platforms) {
method showEditPage (line 178) | public void showEditPage(Context context, Platform platform) {
method showEditPage (line 184) | protected void showEditPage(Context context, List<Platform> platforms) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/ReflectableShareContentCustomizeCallback.java
class ReflectableShareContentCustomizeCallback (line 15) | public class ReflectableShareContentCustomizeCallback implements ShareCo...
method setOnShareCallback (line 19) | public void setOnShareCallback(int what, Callback callback) {
method onShare (line 24) | @Override
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/Shake2Share.java
class Shake2Share (line 27) | public class Shake2Share extends FakeActivity implements SensorEventList...
method setOnShakeListener (line 41) | public void setOnShakeListener(OnShakeListener listener) {
method setActivity (line 45) | public void setActivity(Activity activity) {
method onCreate (line 56) | public void onCreate() {
method startSensor (line 73) | private void startSensor() {
method onDestroy (line 88) | public void onDestroy() {
method stopSensor (line 92) | private void stopSensor() {
method onSensorChanged (line 99) | public void onSensorChanged(SensorEvent event) {
method onAccuracyChanged (line 129) | public void onAccuracyChanged(Sensor sensor, int accuracy) {
type OnShakeListener (line 133) | public static interface OnShakeListener {
method onShake (line 134) | public void onShake();
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/ShareContentCustomizeCallback.java
type ShareContentCustomizeCallback (line 6) | public interface ShareContentCustomizeCallback {
method onShare (line 8) | public void onShare(Platform platform, ShareParams paramsToShare);
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/ShareCore.java
class ShareCore (line 31) | public class ShareCore {
method setShareContentCustomizeCallback (line 35) | public void setShareContentCustomizeCallback(ShareContentCustomizeCall...
method share (line 46) | public boolean share(Platform plat, HashMap<String, Object> data) {
method isUseClientToShare (line 78) | public static boolean isUseClientToShare(String platform) {
method canAuthorize (line 112) | public static boolean canAuthorize(Context context, String platform) {
method canGetUserInfo (line 125) | public static boolean canGetUserInfo(Context context, String platform) {
method isDirectShare (line 138) | public static boolean isDirectShare(Platform platform) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/ThemeShareCallback.java
type ThemeShareCallback (line 15) | public interface ThemeShareCallback {
method doShare (line 16) | public void doShare(HashMap<Platform, HashMap<String, Object>> shareDa...
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/classic/EditPage.java
class EditPage (line 70) | public class EditPage extends EditPageFakeActivity implements OnClickLis...
method setActivity (line 96) | public void setActivity(Activity activity) {
method onCreate (line 109) | public void onCreate() {
method getPageView (line 156) | private RelativeLayout getPageView() {
method getPageTitle (line 184) | private TitleLayout getPageTitle() {
method getPageBody (line 213) | private LinearLayout getPageBody() {
method getMainBody (line 240) | private LinearLayout getMainBody() {
method getThumbView (line 275) | private RelativeLayout getThumbView() {
method showThumb (line 348) | private void showThumb() {
method getBodyBottom (line 365) | private LinearLayout getBodyBottom() {
method getAtLine (line 393) | private LinearLayout getAtLine(String platform) {
method getSep (line 450) | private View getSep() {
method getPlatformList (line 461) | private LinearLayout getPlatformList() {
method getImagePin (line 500) | private ImageView getImagePin() {
method getBackground (line 519) | private void getBackground() {
method getName (line 533) | private String getName(String platform) {
method onClick (line 542) | public void onClick(View v) {
method afterPlatformListGot (line 595) | public void afterPlatformListGot() {
method getPlatLogo (line 647) | private Bitmap getPlatLogo(Platform plat) {
method beforeTextChanged (line 665) | public void beforeTextChanged(CharSequence s, int start, int count,
method onTextChanged (line 670) | public void onTextChanged(CharSequence s, int start, int before, int c...
method afterTextChanged (line 676) | public void afterTextChanged(Editable s) {
method onResult (line 680) | public void onResult(HashMap<String, Object> data) {
method hideSoftInput (line 687) | private void hideSoftInput() {
method onFinish (line 697) | public boolean onFinish() {
method onConfigurationChanged (line 702) | public void onConfigurationChanged(Configuration newConfig) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/classic/FollowListPage.java
class FollowListPage (line 50) | public class FollowListPage extends FollowerListFakeActivity implements ...
method onCreate (line 55) | public void onCreate() {
method onClick (line 114) | public void onClick(View v) {
method onItemClick (line 129) | public void onItemClick(AdapterView<?> parent, View view, int position...
class FollowAdapter (line 143) | private static class FollowAdapter extends PullToRefreshListAdapter
method FollowAdapter (line 155) | public FollowAdapter(PullToRefreshView view) {
method setPlatform (line 174) | public void setPlatform(Platform platform) {
method next (line 179) | private void next() {
method getView (line 185) | public View getView(int position, View convertView, ViewGroup parent) {
method getItem (line 270) | public Following getItem(int position) {
method getItemId (line 274) | public long getItemId(int position) {
method getCount (line 278) | public int getCount() {
method getHeaderView (line 282) | public View getHeaderView() {
method onPullDown (line 286) | public void onPullDown(int percent) {
method onRequest (line 290) | public void onRequest() {
method onCancel (line 298) | public void onCancel(Platform plat, int action) {
method onComplete (line 302) | public void onComplete(Platform plat, int action, HashMap<String, Ob...
method onError (line 319) | public void onError(Platform plat, int action, Throwable t) {
method handleMessage (line 323) | public boolean handleMessage(Message msg) {
method onReversed (line 340) | public void onReversed() {
class FollowListItem (line 347) | private static class FollowListItem {
class PRTHeader (line 354) | private static class PRTHeader extends LinearLayout {
method PRTHeader (line 359) | public PRTHeader(Context context) {
method onPullDown (line 395) | public void onPullDown(int percent) {
method onRequest (line 422) | public void onRequest() {
method reverse (line 431) | public void reverse() {
class RotateImageView (line 439) | private static class RotateImageView extends ImageView {
method RotateImageView (line 442) | public RotateImageView(Context context) {
method setRotation (line 446) | public void setRotation(int degree) {
method onDraw (line 451) | protected void onDraw(Canvas canvas) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/classic/PlatformGridView.java
class PlatformGridView (line 42) | @SuppressWarnings("deprecation")
method PlatformGridView (line 71) | public PlatformGridView(Context context) {
method PlatformGridView (line 76) | public PlatformGridView(Context context, AttributeSet attrs) {
method init (line 81) | private void init(final Context context) {
method calPageSize (line 106) | private void calPageSize() {
method handleMessage (line 131) | public boolean handleMessage(Message msg) {
method afterPlatformListGot (line 142) | public void afterPlatformListGot() {
method onConfigurationChanged (line 195) | public void onConfigurationChanged() {
method setData (line 206) | public void setData(HashMap<String, Object> data, boolean silent) {
method setHiddenPlatforms (line 211) | public void setHiddenPlatforms(HashMap<String, String> hiddenPlatforms) {
method setCustomerLogos (line 216) | public void setCustomerLogos(ArrayList<CustomerLogo> customers) {
method setEditPageBackground (line 220) | public void setEditPageBackground(View bgView) {
method setParent (line 225) | public void setParent(PlatformListPage parent) {
method onClick (line 229) | public void onClick(View v) {
method disableOverScrollMode (line 242) | private void disableOverScrollMode(View view) {
class PlatformAdapter (line 257) | private static class PlatformAdapter extends ViewPagerAdapter {
method PlatformAdapter (line 264) | public PlatformAdapter(PlatformGridView platformGridView) {
method getCount (line 305) | public int getCount() {
method getView (line 309) | public View getView(int position, View convertView, ViewGroup parent) {
method onScreenChange (line 337) | public void onScreenChange(int currentScreen, int lastScreen) {
class GridView (line 349) | private static class GridView extends LinearLayout {
method GridView (line 355) | public GridView(PlatformAdapter platformAdapter) {
method setData (line 361) | public void setData(int lines, Object[] beans) {
method init (line 367) | private void init() {
method getView (line 408) | private LinearLayout getView(int position, OnClickListener ocL, Cont...
method getIcon (line 455) | private Bitmap getIcon(Platform plat) {
method getName (line 470) | private String getName(Platform plat) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/classic/PlatformListPage.java
class PlatformListPage (line 29) | public class PlatformListPage extends PlatformListFakeActivity implement...
method onCreate (line 43) | public void onCreate() {
method initPageView (line 63) | private void initPageView() {
method initAnim (line 115) | private void initAnim() {
method onConfigurationChanged (line 131) | public void onConfigurationChanged(Configuration newConfig) {
method onFinish (line 137) | public boolean onFinish() {
method onClick (line 168) | @Override
method onPlatformIconClick (line 176) | public void onPlatformIconClick(View v, ArrayList<Object> platforms) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/skyblue/EditPage.java
class EditPage (line 36) | public class EditPage extends EditPageFakeActivity implements OnClickLis...
method onCreate (line 44) | public void onCreate() {
method initView (line 54) | private void initView() {
method initTitleView (line 67) | private void initTitleView() {
method initBodyView (line 77) | private void initBodyView() {
method initAtUserView (line 97) | private void initAtUserView() {
method initImageListView (line 127) | private void initImageListView() {
method makeImageItemView (line 149) | private View makeImageItemView(final ImageInfo imageInfo) {
method onClick (line 176) | public void onClick(View v) {
method onShareButtonClick (line 195) | private void onShareButtonClick(View v) {
method beforeTextChanged (line 207) | public void beforeTextChanged(CharSequence s, int start, int count,
method onTextChanged (line 212) | public void onTextChanged(CharSequence s, int start, int before, int c...
method afterTextChanged (line 218) | public void afterTextChanged(Editable s) {
method onResult (line 222) | public void onResult(HashMap<String, Object> data) {
method onFinish (line 229) | public boolean onFinish() {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/skyblue/FollowListPage.java
class FollowListPage (line 50) | public class FollowListPage extends FollowerListFakeActivity implements ...
method onCreate (line 56) | public void onCreate() {
method onClick (line 115) | public void onClick(View v) {
method onItemClick (line 130) | public void onItemClick(AdapterView<?> parent, View view, int position...
class FollowAdapter (line 144) | private static class FollowAdapter extends PullToRefreshListAdapter
method FollowAdapter (line 156) | public FollowAdapter(PullToRefreshView view) {
method setPlatform (line 175) | public void setPlatform(Platform platform) {
method next (line 180) | private void next() {
method getView (line 186) | public View getView(int position, View convertView, ViewGroup parent) {
method getItem (line 271) | public Following getItem(int position) {
method getItemId (line 275) | public long getItemId(int position) {
method getCount (line 279) | public int getCount() {
method getHeaderView (line 283) | public View getHeaderView() {
method onPullDown (line 287) | public void onPullDown(int percent) {
method onRequest (line 291) | public void onRequest() {
method onCancel (line 299) | public void onCancel(Platform plat, int action) {
method onComplete (line 303) | public void onComplete(Platform plat, int action, HashMap<String, Ob...
method onError (line 320) | public void onError(Platform plat, int action, Throwable t) {
method handleMessage (line 324) | public boolean handleMessage(Message msg) {
method onReversed (line 341) | public void onReversed() {
class FollowListItem (line 348) | private static class FollowListItem {
class PRTHeader (line 355) | private static class PRTHeader extends LinearLayout {
method PRTHeader (line 360) | public PRTHeader(Context context) {
method onPullDown (line 396) | public void onPullDown(int percent) {
method onRequest (line 423) | public void onRequest() {
method reverse (line 432) | public void reverse() {
class RotateImageView (line 440) | private static class RotateImageView extends ImageView {
method RotateImageView (line 443) | public RotateImageView(Context context) {
method setRotation (line 447) | public void setRotation(int degree) {
method onDraw (line 452) | protected void onDraw(Canvas canvas) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/skyblue/PlatformGridViewAdapter.java
class PlatformGridViewAdapter (line 35) | public class PlatformGridViewAdapter extends BaseAdapter implements View...
class ViewHolder (line 42) | static class ViewHolder {
method PlatformGridViewAdapter (line 49) | public PlatformGridViewAdapter(Context context) {
method getCount (line 53) | @Override
method getItem (line 58) | @Override
method getItemId (line 63) | @Override
method getView (line 68) | @Override
method onClick (line 115) | @Override
method setData (line 149) | public void setData(Platform[] platforms, HashMap<String, String> hidd...
method setCustomerLogos (line 169) | public void setCustomerLogos(ArrayList<CustomerLogo> customers) {
method getCheckedItems (line 175) | public List<Object> getCheckedItems() {
method getIcon (line 191) | private Bitmap getIcon(Platform plat, String subfix) {
method getName (line 197) | private String getName(Platform plat) {
FILE: sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/skyblue/PlatformListPage.java
class PlatformListPage (line 25) | public class PlatformListPage extends PlatformListFakeActivity implement...
method onCreate (line 28) | public void onCreate() {
method initView (line 35) | private void initView() {
method onClick (line 64) | public void onClick(View v) {
method onShareButtonClick (line 80) | private void onShareButtonClick(View v) {
Condensed preview — 159 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (480K chars).
[
{
"path": "CNiao5Shop.iml",
"chars": 941,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\"CNiao5Shop\" external.linked.project.path=\"$MO"
},
{
"path": "README.md",
"chars": 2357,
"preview": "\n**h2声明:**<br/>\n 此源码是菜鸟窝企业项目课程[《菜鸟商城》](http://www.cniao5.com/clazz/view/10073.html)的源码\n 我花了1000+大洋学习此课程获取到的,我分享源码出来未来大家方"
},
{
"path": "app/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "app/app.iml",
"chars": 10922,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\":app\" external.linked.project.path=\"$MODULE_D"
},
{
"path": "app/build.gradle",
"chars": 1336,
"preview": "apply plugin: 'com.android.application'\n\nandroid {\n compileSdkVersion 23\n buildToolsVersion \"23.0.1\"\n\n defaultC"
},
{
"path": "app/proguard-rules.pro",
"chars": 678,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
},
{
"path": "app/src/androidTest/java/cniao5/com/cniao5shop/ApplicationTest.java",
"chars": 352,
"preview": "package cniao5.com.cniao5shop;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href"
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 2739,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package="
},
{
"path": "app/src/main/assets/ShareSDK.xml",
"chars": 10162,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<DevInfor>\r\n <!--\r\n \t说明:\r\n \t\r\n \t1、表格中的第一项\r\n \t\t<ShareSDK \r\n "
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/CniaoApplication.java",
"chars": 369,
"preview": "package cniao5.com.cniao5shop;\n\nimport android.app.Application;\n\nimport com.facebook.drawee.backends.pipeline.Fresco;\n\n/"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/Contants.java",
"chars": 832,
"preview": "package cniao5.com.cniao5shop;\n\n\npublic class Contants {\n\n\n\n public static final String COMPAINGAIN_ID=\"compaigin_id"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/MainActivity.java",
"chars": 3474,
"preview": "package cniao5.com.cniao5shop;\n\nimport android.os.Bundle;\nimport android.support.v4.app.Fragment;\nimport android.support"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/WareDetailActivity.java",
"chars": 4783,
"preview": "package cniao5.com.cniao5shop;\n\nimport android.content.Context;\nimport android.os.Bundle;\nimport android.support.v7.app."
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/WareListActivity.java",
"chars": 6253,
"preview": "package cniao5.com.cniao5shop;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.support.design.w"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/BaseAdapter.java",
"chars": 3890,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\ni"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/BaseViewHolder.java",
"chars": 1588,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.support.v7.widget.RecyclerView;\nimport android.util.SparseArray;\n"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/CartAdapter.java",
"chars": 5243,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.content.Context;\nimport android.net.Uri;\nimport android.text.Html"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/CategoryAdapter.java",
"chars": 627,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.content.Context;\n\nimport java.util.List;\n\nimport cniao5.com.cniao"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/HWAdatper.java",
"chars": 1676,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.content.Context;\nimport android.net.Uri;\nimport android.view.View"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/HomeCatgoryAdapter.java",
"chars": 4592,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.animation.Animator;\nimport android.animation.AnimatorListenerAdap"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/HotWaresAdapter.java",
"chars": 2484,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.net.Uri;\nimport android.support.v7.widget.RecyclerView;\nimport an"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/SimpleAdapter.java",
"chars": 498,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.content.Context;\n\nimport java.util.List;\n\n/**\n * Created by <a hr"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/WaresAdapter.java",
"chars": 917,
"preview": "package cniao5.com.cniao5shop.adapter;\n\nimport android.content.Context;\nimport android.net.Uri;\nimport com.facebook.draw"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/CardViewtemDecortion.java",
"chars": 1457,
"preview": "package cniao5.com.cniao5shop.adapter.decoration;\n\nimport android.graphics.Canvas;\nimport android.graphics.Rect;\nimport "
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/DividerGridItemDecoration.java",
"chars": 4984,
"preview": "package cniao5.com.cniao5shop.adapter.decoration;\n\nimport android.content.Context;\nimport android.content.res.TypedArray"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/adapter/decoration/DividerItemDecoration.java",
"chars": 3373,
"preview": "package cniao5.com.cniao5shop.adapter.decoration;\n\nimport android.content.Context;\nimport android.content.res.TypedArray"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/Banner.java",
"chars": 651,
"preview": "package cniao5.com.cniao5shop.bean;\n\n/**\n * Created by Ivan on 15/10/2.\n */\npublic class Banner extends BaseBean {\n\n\n "
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/BaseBean.java",
"chars": 297,
"preview": "package cniao5.com.cniao5shop.bean;\n\nimport java.io.Serializable;\n\n/**\n * Created by Ivan on 15/9/24.\n */\npublic class B"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/Campaign.java",
"chars": 736,
"preview": "/*\n*Campaign.java\n*Created on 2015/10/3 下午10:34 by Ivan\n*Copyright(c)2014 Guangzhou Onion Information Technology Co., Lt"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/Category.java",
"chars": 438,
"preview": "package cniao5.com.cniao5shop.bean;\n\n\n\npublic class Category extends BaseBean {\n\n\n public Category() {\n }\n\n pub"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/HomeCampaign.java",
"chars": 1202,
"preview": "/*\n*CampaignRecommendEx.java\n*Created on 2015/10/4 上午12:12 by Ivan\n*Copyright(c)2014 Guangzhou Onion Information Technol"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/Page.java",
"chars": 1076,
"preview": "package cniao5.com.cniao5shop.bean;\n\nimport java.util.List;\n\n/**\n * Created by <a href=\"http://www.cniao5.com\">菜鸟窝</a>\n "
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/ShoppingCart.java",
"chars": 578,
"preview": "package cniao5.com.cniao5shop.bean;\n\nimport java.io.Serializable;\n\n/**\n * Created by <a href=\"http://www.cniao5.com\">菜鸟窝"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/Tab.java",
"chars": 727,
"preview": "package cniao5.com.cniao5shop.bean;\n\n/**\n * Created by Ivan on 15/9/25.\n */\npublic class Tab {\n\n private int title;\n"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/bean/Wares.java",
"chars": 1025,
"preview": "package cniao5.com.cniao5shop.bean;\n\nimport java.io.Serializable;\n\n/**\n * Created by <a href=\"http://www.cniao5.com\">菜鸟窝"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/fragment/BaseFragment.java",
"chars": 981,
"preview": "package cniao5.com.cniao5shop.fragment;\n\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport an"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/fragment/CartFragment.java",
"chars": 3897,
"preview": "package cniao5.com.cniao5shop.fragment;\n\nimport android.os.Bundle;\nimport android.support.v7.widget.LinearLayoutManager;"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/fragment/CategoryFragment.java",
"chars": 9206,
"preview": "package cniao5.com.cniao5shop.fragment;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.support"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/fragment/HomeFragment.java",
"chars": 4871,
"preview": "package cniao5.com.cniao5shop.fragment;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.support"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/fragment/HotFragment.java",
"chars": 3012,
"preview": "package cniao5.com.cniao5shop.fragment;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.support"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/fragment/MineFragment.java",
"chars": 529,
"preview": "package cniao5.com.cniao5shop.fragment;\n\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.vi"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/http/BaseCallback.java",
"chars": 1459,
"preview": "package cniao5.com.cniao5shop.http;\n\nimport com.google.gson.internal.$Gson$Types;\nimport com.squareup.okhttp.Request;\nim"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/http/OkHttpHelper.java",
"chars": 5706,
"preview": "package cniao5.com.cniao5shop.http;\n\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.util.Log;\n\nimpo"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/http/SpotsCallBack.java",
"chars": 1054,
"preview": "package cniao5.com.cniao5shop.http;\n\nimport android.content.Context;\nimport com.squareup.okhttp.Request;\nimport com.squa"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/utils/CartProvider.java",
"chars": 2843,
"preview": "package cniao5.com.cniao5shop.utils;\n\nimport android.content.Context;\nimport android.util.SparseArray;\n\nimport com.googl"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/utils/JSONUtil.java",
"chars": 919,
"preview": "/*\n*JSONUtil.java\n*Created on 2014-9-29 上午9:54 by Ivan\n*Copyright(c)2014 Guangzhou Onion Information Technology Co., Ltd"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/utils/Pager.java",
"chars": 7814,
"preview": "package cniao5.com.cniao5shop.utils;\n\nimport android.content.Context;\nimport android.widget.Toast;\n\nimport com.cjj.Mater"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/utils/PreferencesUtils.java",
"chars": 9651,
"preview": "package cniao5.com.cniao5shop.utils;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\n/**\n * "
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/utils/TimeUtils.java",
"chars": 1503,
"preview": "package cniao5.com.cniao5shop.utils;\n\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\n\n/**\n * TimeUtils\n *\n */"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/utils/ToastUtils.java",
"chars": 1410,
"preview": "package cniao5.com.cniao5shop.utils;\n\nimport android.content.Context;\nimport android.widget.Toast;\n\n/**\n * ToastUtils\n *"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/widget/CNiaoToolBar.java",
"chars": 4770,
"preview": "package cniao5.com.cniao5shop.widget;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport andro"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/widget/FragmentTabHost.java",
"chars": 13085,
"preview": "package cniao5.com.cniao5shop.widget;\r\n\r\n\r\n\r\n/**\r\n * Created by monkey\r\n * on 2014/9/24\r\n * 功能描述:修改过的FragmentTabHost,保存f"
},
{
"path": "app/src/main/java/cniao5/com/cniao5shop/widget/NumberAddSubView.java",
"chars": 5323,
"preview": "package cniao5.com.cniao5shop.widget;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport andro"
},
{
"path": "app/src/main/res/color/grey_btn_text_color.xml",
"chars": 339,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "app/src/main/res/color/selector_tab_text.xml",
"chars": 386,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item a"
},
{
"path": "app/src/main/res/color/white_color_selector.xml",
"chars": 250,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "app/src/main/res/drawable/bg_btn_style_green.xml",
"chars": 835,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\">\n "
},
{
"path": "app/src/main/res/drawable/bg_btn_style_grey.xml",
"chars": 1125,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\">\n "
},
{
"path": "app/src/main/res/drawable/bg_btn_style_red.xml",
"chars": 829,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\">\n "
},
{
"path": "app/src/main/res/drawable/bg_btn_style_white.xml",
"chars": 1017,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n"
},
{
"path": "app/src/main/res/drawable/selector_checkbox.xml",
"chars": 1515,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <!--<i"
},
{
"path": "app/src/main/res/drawable/selector_icon_cart.xml",
"chars": 1005,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n\n\n\n\n <"
},
{
"path": "app/src/main/res/drawable/selector_icon_category.xml",
"chars": 1009,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n\n\n\n\n <"
},
{
"path": "app/src/main/res/drawable/selector_icon_home.xml",
"chars": 983,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n\n <!--"
},
{
"path": "app/src/main/res/drawable/selector_icon_hot.xml",
"chars": 979,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n\n\n\n\n <"
},
{
"path": "app/src/main/res/drawable/selector_icon_mine.xml",
"chars": 985,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n\n\n\n\n <"
},
{
"path": "app/src/main/res/drawable/selector_list_item.xml",
"chars": 329,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n <ite"
},
{
"path": "app/src/main/res/drawable/selector_number_add_sub.xml",
"chars": 286,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:sha"
},
{
"path": "app/src/main/res/drawable/selector_search_view.xml",
"chars": 789,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n <selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\""
},
{
"path": "app/src/main/res/layout/activity_main.xml",
"chars": 1061,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_test.xml",
"chars": 655,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "app/src/main/res/layout/activity_ware_detail.xml",
"chars": 997,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_warelist.xml",
"chars": 2271,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "app/src/main/res/layout/fragment_cart.xml",
"chars": 2989,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xm"
},
{
"path": "app/src/main/res/layout/fragment_category.xml",
"chars": 2475,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "app/src/main/res/layout/fragment_home.xml",
"chars": 1207,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "app/src/main/res/layout/fragment_hot.xml",
"chars": 1273,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "app/src/main/res/layout/fragment_mine.xml",
"chars": 1390,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "app/src/main/res/layout/tab_indicator.xml",
"chars": 726,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:orientation=\"vertical\"\n android:"
},
{
"path": "app/src/main/res/layout/template_cart.xml",
"chars": 2389,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "app/src/main/res/layout/template_grid_wares.xml",
"chars": 1972,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n xmlns:android=\"http://schemas.android.com"
},
{
"path": "app/src/main/res/layout/template_home_cardview.xml",
"chars": 2469,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n xmlns:android=\"http://schemas.android.com"
},
{
"path": "app/src/main/res/layout/template_home_cardview2.xml",
"chars": 2616,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n xmlns:android=\"http://schemas.android.com"
},
{
"path": "app/src/main/res/layout/template_hot_wares.xml",
"chars": 2625,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<android.support.v7.widget.CardView\n xmlns:android=\"http://schemas.android.co"
},
{
"path": "app/src/main/res/layout/template_single_text.xml",
"chars": 523,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "app/src/main/res/layout/toolbar.xml",
"chars": 1427,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<RelativeLayout\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "app/src/main/res/layout/widet_num_add_sub.xml",
"chars": 1124,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "app/src/main/res/menu/menu_main.xml",
"chars": 361,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:app=\"http://schemas.android.com/apk/res-auto\""
},
{
"path": "app/src/main/res/values/attr_number_add_sub_view.xml",
"chars": 698,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <attr name=\"value\" format=\"integer|reference\"/>\n <attr name=\""
},
{
"path": "app/src/main/res/values/attrs.xml",
"chars": 305,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <declare-styleable name=\"CNiaoToolBar\">\n\n <attr name=\"rig"
},
{
"path": "app/src/main/res/values/colors.xml",
"chars": 11521,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<resources>\r\n\r\n <color name=\"white\">#ffffff</color>\r\n <!-- 白色 -->\r\n <co"
},
{
"path": "app/src/main/res/values/dimens.xml",
"chars": 1576,
"preview": "<resources>\n <!-- Default screen margins, per the Android Design guidelines. -->\n <dimen name=\"activity_horizontal"
},
{
"path": "app/src/main/res/values/ids.xml",
"chars": 289,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <item name=\"textview\" type=\"id\"/>\n <item name=\"imgview\" type="
},
{
"path": "app/src/main/res/values/strings.xml",
"chars": 477,
"preview": "<resources>\n <string name=\"app_name\">CNiao5Shop</string>\n\n <string name=\"hello_world\">Hello world!</string>\n <s"
},
{
"path": "app/src/main/res/values/styles.xml",
"chars": 5305,
"preview": "<resources>\n\n <!-- Base application theme. -->\n <style name=\"AppTheme\" parent=\"Theme.AppCompat\">\n <!-- Cust"
},
{
"path": "app/src/main/res/values-1280x768/dimens.xml",
"chars": 189,
"preview": "<resources>\n\n\n <dimen name=\"ware_grid_img_width\">150dp</dimen>\n <dimen name=\"ware_grid_img_height\">150dp</dimen>\n\n"
},
{
"path": "app/src/main/res/values-w820dp/dimens.xml",
"chars": 358,
"preview": "<resources>\n <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n (such as s"
},
{
"path": "build/intermediates/dex-cache/cache.xml",
"chars": 15936,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<items version=\"2\" >\n\n <item\n jar=\"/Users/Ivan/AndroidstudioProjects/CN"
},
{
"path": "build.gradle",
"chars": 507,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n r"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 230,
"preview": "#Fri Sep 25 13:27:55 CST 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "gradle.properties",
"chars": 855,
"preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
},
{
"path": "gradlew",
"chars": 5080,
"preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n## Gradle start "
},
{
"path": "gradlew.bat",
"chars": 2404,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@r"
},
{
"path": "local.properties",
"chars": 478,
"preview": "## This file is automatically generated by Android Studio.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n#"
},
{
"path": "settings.gradle",
"chars": 28,
"preview": "include ':app', ':sharesdk'\n"
},
{
"path": "sharesdk/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "sharesdk/build.gradle",
"chars": 484,
"preview": "apply plugin: 'com.android.library'\n\nandroid {\n compileSdkVersion 23\n buildToolsVersion \"23.0.1\"\n\n defaultConfi"
},
{
"path": "sharesdk/proguard-rules.pro",
"chars": 678,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
},
{
"path": "sharesdk/sharesdk.iml",
"chars": 8151,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\":sharesdk\" external.linked.project.path=\"$MOD"
},
{
"path": "sharesdk/src/androidTest/java/cniao5/com/sharesdk/ApplicationTest.java",
"chars": 350,
"preview": "package cniao5.com.sharesdk;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href=\""
},
{
"path": "sharesdk/src/main/AndroidManifest.xml",
"chars": 555,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"cn.sharesdk.onekeyshare\"\n android:v"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/CustomerLogo.java",
"chars": 480,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/EditPageFakeActivity.java",
"chars": 7680,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/FollowerListFakeActivity.java",
"chars": 5650,
"preview": "package cn.sharesdk.onekeyshare;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\n\nimport com.mob.tools.FakeActivi"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/OnekeyShare.java",
"chars": 19137,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/OnekeyShareTheme.java",
"chars": 82,
"preview": "package cn.sharesdk.onekeyshare;\n\npublic enum OnekeyShareTheme {CLASSIC, SKYBLUE}\n"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/PicViewer.java",
"chars": 5909,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/PlatformListFakeActivity.java",
"chars": 5615,
"preview": "package cn.sharesdk.onekeyshare;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.view.Key"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/ReflectableShareContentCustomizeCallback.java",
"chars": 955,
"preview": "package cn.sharesdk.onekeyshare;\n\nimport android.os.Handler.Callback;\nimport android.os.Message;\nimport cn.sharesdk.fram"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/Shake2Share.java",
"chars": 3705,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/ShareContentCustomizeCallback.java",
"chars": 246,
"preview": "package cn.sharesdk.onekeyshare;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.Platform.SharePara"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/ShareCore.java",
"chars": 4953,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/ThemeShareCallback.java",
"chars": 428,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/classic/EditPage.java",
"chars": 22859,
"preview": "/*\n * Offical Website:http://www.mob.com\n * Support QQ: 4006852216\n * Offical Wechat Account:ShareSDK (We will inform "
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/classic/FollowListPage.java",
"chars": 13458,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/classic/PlatformGridView.java",
"chars": 14152,
"preview": "/*\n * Offical Website:http://www.mob.com\n * Support QQ: 4006852216\n * Offical Wechat Account:ShareSDK (We will inform "
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/classic/PlatformListPage.java",
"chars": 5063,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/skyblue/EditPage.java",
"chars": 7054,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/skyblue/FollowListPage.java",
"chars": 13459,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/skyblue/PlatformGridViewAdapter.java",
"chars": 6169,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/java/cn/sharesdk/onekeyshare/theme/skyblue/PlatformListPage.java",
"chars": 2540,
"preview": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也"
},
{
"path": "sharesdk/src/main/res/drawable/ssdk_oks_classic_platform_corners_bg.xml",
"chars": 423,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" >\r\n\r\n <soli"
},
{
"path": "sharesdk/src/main/res/drawable/ssdk_oks_skyblue_platform_list_item.xml",
"chars": 272,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <solid\n "
},
{
"path": "sharesdk/src/main/res/drawable/ssdk_oks_skyblue_platform_list_item_selected.xml",
"chars": 253,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <solid\n "
},
{
"path": "sharesdk/src/main/res/drawable/ssdk_oks_skyblue_platform_list_selector.xml",
"chars": 495,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item\n "
},
{
"path": "sharesdk/src/main/res/drawable-xhdpi/ssdk_oks_shake_to_share_back.xml",
"chars": 707,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" \r\n android:"
},
{
"path": "sharesdk/src/main/res/layout/ssdk_oks_skyblue_editpage.xml",
"chars": 3675,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "sharesdk/src/main/res/layout/ssdk_oks_skyblue_editpage_at_layout.xml",
"chars": 1091,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "sharesdk/src/main/res/layout/ssdk_oks_skyblue_editpage_inc_image_layout.xml",
"chars": 1017,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "sharesdk/src/main/res/layout/ssdk_oks_skyblue_share_actionbar.xml",
"chars": 1158,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<RelativeLayout\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "sharesdk/src/main/res/layout/ssdk_oks_skyblue_share_platform_list.xml",
"chars": 717,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "sharesdk/src/main/res/layout/ssdk_oks_skyblue_share_platform_list_item.xml",
"chars": 1727,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "sharesdk/src/main/res/values/ssdk_instapaper_strings.xml",
"chars": 1883,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<resources>\n <string name=\"ssdk_instapager_login_html\" formatted=\"false\"><![C"
},
{
"path": "sharesdk/src/main/res/values/ssdk_oks_strings.xml",
"chars": 933,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<resources>\r\n <string name=\"ssdk_oks_cancel\">取消</string>\r\n <string name=\"s"
},
{
"path": "sharesdk/src/main/res/values/ssdk_strings.xml",
"chars": 4211,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<resources>\r\n <string name=\"ssdk_weibo_oauth_regiseter\">应用授权</string>\r\n <s"
},
{
"path": "sharesdk/src/main/res/values-en/ssdk_oks_strings.xml",
"chars": 1129,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<resources>\r\n <string name=\"ssdk_oks_cancel\">Cancel</string>\r\n <string nam"
},
{
"path": "sharesdk/src/main/res/values-en/ssdk_strings.xml",
"chars": 4482,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<resources>\r\n <string name=\"ssdk_weibo_oauth_regiseter\">Authorization</string"
}
]
// ... and 12 more files (download for full content)
About this extraction
This page contains the full source code of the yxs666/cniao5-shop GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 159 files (414.8 KB), approximately 114.4k tokens, and a symbol index with 714 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.