diff --git a/代码/在这里 2.0.1/bin/Shop.apk b/代码/在这里 2.0.1/bin/Shop.apk
index d36c5c9..b787932 100644
Binary files a/代码/在这里 2.0.1/bin/Shop.apk and b/代码/在这里 2.0.1/bin/Shop.apk differ
diff --git a/代码/在这里2.1/.DS_Store b/代码/在这里2.1/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/代码/在这里2.1/.DS_Store differ
diff --git a/代码/在这里2.1/.classpath b/代码/在这里2.1/.classpath
new file mode 100644
index 0000000..0461652
--- /dev/null
+++ b/代码/在这里2.1/.classpath
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/.project b/代码/在这里2.1/.project
new file mode 100644
index 0000000..b261c40
--- /dev/null
+++ b/代码/在这里2.1/.project
@@ -0,0 +1,33 @@
+
+
+ Shop
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/代码/在这里2.1/.settings/org.eclipse.core.resources.prefs b/代码/在这里2.1/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/代码/在这里2.1/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/代码/在这里2.1/.settings/org.eclipse.jdt.core.prefs b/代码/在这里2.1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ef8a789
--- /dev/null
+++ b/代码/在这里2.1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/代码/在这里2.1/AndroidManifest.xml b/代码/在这里2.1/AndroidManifest.xml
new file mode 100644
index 0000000..26bd4d1
--- /dev/null
+++ b/代码/在这里2.1/AndroidManifest.xml
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/gen/com/stone/shop/BuildConfig.java b/代码/在这里2.1/gen/com/stone/shop/BuildConfig.java
new file mode 100644
index 0000000..f1eddbc
--- /dev/null
+++ b/代码/在这里2.1/gen/com/stone/shop/BuildConfig.java
@@ -0,0 +1,6 @@
+/** Automatically generated file. DO NOT MODIFY */
+package com.stone.shop;
+
+public final class BuildConfig {
+ public final static boolean DEBUG = true;
+}
\ No newline at end of file
diff --git a/代码/在这里2.1/gen/com/stone/shop/R.java b/代码/在这里2.1/gen/com/stone/shop/R.java
new file mode 100644
index 0000000..d4645b3
--- /dev/null
+++ b/代码/在这里2.1/gen/com/stone/shop/R.java
@@ -0,0 +1,447 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package com.stone.shop;
+
+public final class R {
+ public static final class anim {
+ public static final int cycle_7=0x7f040000;
+ public static final int scale=0x7f040001;
+ public static final int shake=0x7f040002;
+ }
+ public static final class attr {
+ }
+ public static final class color {
+ public static final int actionbar_background_end=0x7f050002;
+ public static final int actionbar_background_item_pressed_end=0x7f050005;
+ public static final int actionbar_background_item_pressed_start=0x7f050004;
+ public static final int actionbar_background_start=0x7f050001;
+ public static final int actionbar_separator=0x7f050000;
+ public static final int actionbar_title=0x7f050003;
+ public static final int qq_common_bg=0x7f050006;
+ public static final int second_color=0x7f050008;
+ public static final int theme_color=0x7f050007;
+ }
+ public static final class dimen {
+ /** Default screen margins, per the Android Design guidelines.
+
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+
+ */
+ public static final int activity_horizontal_margin=0x7f060000;
+ public static final int activity_vertical_margin=0x7f060001;
+ }
+ public static final class drawable {
+ public static final int abs__tab_selected_focused_holo=0x7f020000;
+ public static final int abs__tab_selected_holo=0x7f020001;
+ public static final int abs__tab_selected_pressed_holo=0x7f020002;
+ public static final int abs__tab_unselected_pressed_holo=0x7f020003;
+ public static final int action_hate=0x7f020004;
+ public static final int action_rate=0x7f020005;
+ public static final int actionbar_background=0x7f020006;
+ public static final int bg1=0x7f020007;
+ public static final int bg3=0x7f020008;
+ public static final int bg_account=0x7f020009;
+ public static final int bg_account_focus=0x7f02000a;
+ public static final int bg_account_normal=0x7f02000b;
+ public static final int bg_comment_comment=0x7f02000c;
+ public static final int bg_comment_floor=0x7f02000d;
+ public static final int bg_logout_normal=0x7f02000e;
+ public static final int bg_logout_pressed=0x7f02000f;
+ public static final int btn_comment_publish=0x7f020010;
+ public static final int btn_green_normal=0x7f020011;
+ public static final int btn_green_pressed=0x7f020012;
+ public static final int checkbox_bg1=0x7f020013;
+ public static final int checkbox_selected=0x7f020014;
+ public static final int checkbox_selected_press=0x7f020015;
+ public static final int checkbox_unselect=0x7f020016;
+ public static final int checkbox_unselect_press=0x7f020017;
+ public static final int custom_ratingbar=0x7f020018;
+ public static final int default_ptr_flip=0x7f020019;
+ public static final int default_ptr_rotate=0x7f02001a;
+ public static final int edittext_focus=0x7f02001b;
+ public static final int edittext_normal=0x7f02001c;
+ public static final int ic_1=0x7f02001d;
+ public static final int ic_2=0x7f02001e;
+ public static final int ic_3=0x7f02001f;
+ public static final int ic_41=0x7f020020;
+ public static final int ic_42=0x7f020021;
+ public static final int ic_5=0x7f020022;
+ public static final int ic_6=0x7f020023;
+ public static final int ic_7=0x7f020024;
+ public static final int ic_8=0x7f020025;
+ public static final int ic_action_comment=0x7f020026;
+ public static final int ic_action_edit=0x7f020027;
+ public static final int ic_action_fav=0x7f020028;
+ public static final int ic_action_fav_choose=0x7f020029;
+ public static final int ic_action_fav_normal=0x7f02002a;
+ public static final int ic_action_love=0x7f02002b;
+ public static final int ic_action_share=0x7f02002c;
+ public static final int ic_app=0x7f02002d;
+ public static final int ic_app1=0x7f02002e;
+ public static final int ic_banner1=0x7f02002f;
+ public static final int ic_banner_hide=0x7f020030;
+ public static final int ic_banner_image_default1=0x7f020031;
+ public static final int ic_banner_image_default11=0x7f020032;
+ public static final int ic_banner_image_default2=0x7f020033;
+ public static final int ic_banner_image_default22=0x7f020034;
+ public static final int ic_banner_image_default3=0x7f020035;
+ public static final int ic_banner_image_default4=0x7f020036;
+ public static final int ic_banner_image_default55=0x7f020037;
+ public static final int ic_banner_image_default77=0x7f020038;
+ public static final int ic_breakfast=0x7f020039;
+ public static final int ic_car=0x7f02003a;
+ public static final int ic_date=0x7f02003b;
+ public static final int ic_hbut=0x7f02003c;
+ public static final int ic_hide=0x7f02003d;
+ public static final int ic_launcher=0x7f02003e;
+ public static final int ic_loc=0x7f02003f;
+ public static final int ic_menu_copy_holo_light=0x7f020040;
+ public static final int ic_menu_find_holo_light=0x7f020041;
+ public static final int ic_menu_info_details=0x7f020042;
+ public static final int ic_menu_myplaces=0x7f020043;
+ public static final int ic_menu_notifications=0x7f020044;
+ public static final int ic_menu_share=0x7f020045;
+ public static final int ic_mine=0x7f020046;
+ public static final int ic_page_indicator=0x7f020047;
+ public static final int ic_page_indicator_focused=0x7f020048;
+ public static final int ic_phone=0x7f020049;
+ public static final int ic_phone2=0x7f02004a;
+ public static final int ic_phone3=0x7f02004b;
+ public static final int ic_sale=0x7f02004c;
+ public static final int ic_search=0x7f02004d;
+ public static final int ic_shelf_category_divider=0x7f02004e;
+ public static final int ic_shop=0x7f02004f;
+ public static final int ic_shop_info_bg=0x7f020050;
+ public static final int ic_shop_info_bg2=0x7f020051;
+ public static final int ic_shop_info_bg22=0x7f020052;
+ public static final int ic_star_no=0x7f020053;
+ public static final int ic_star_yes=0x7f020054;
+ public static final int indicator_arrow=0x7f020055;
+ public static final int login_button=0x7f020056;
+ public static final int login_button_select=0x7f020057;
+ public static final int qq=0x7f020058;
+ public static final int selector_edittext=0x7f020059;
+ public static final int selector_edittext_account=0x7f02005a;
+ public static final int selector_load_more=0x7f02005b;
+ public static final int selector_logout=0x7f02005c;
+ public static final int shap_circle=0x7f02005d;
+ public static final int shap_divider=0x7f02005e;
+ public static final int shape_color_frame=0x7f02005f;
+ public static final int shape_grid_item=0x7f020060;
+ public static final int shape_left_radius_color_square=0x7f020061;
+ public static final int shape_radius=0x7f020062;
+ public static final int shape_radius_color_square=0x7f020063;
+ public static final int shape_radius_square=0x7f020064;
+ public static final int splash=0x7f020065;
+ public static final int star_img1=0x7f020066;
+ public static final int star_img2=0x7f020067;
+ public static final int star_img3=0x7f020068;
+ public static final int star_img4=0x7f020069;
+ public static final int star_img5=0x7f02006a;
+ public static final int tab_bg_selector=0x7f02006b;
+ public static final int user_icon_default=0x7f02006c;
+ public static final int user_icon_default_main=0x7f02006d;
+ public static final int welcome_background=0x7f02006e;
+ }
+ public static final class id {
+ public static final int action_settings=0x7f0a00b7;
+ public static final int actionbar_comment=0x7f0a000f;
+ public static final int area_commit=0x7f0a0014;
+ public static final int btn_about=0x7f0a004c;
+ public static final int btn_add=0x7f0a0093;
+ public static final int btn_add_good=0x7f0a0075;
+ public static final int btn_add_news=0x7f0a0076;
+ public static final int btn_add_shop=0x7f0a0074;
+ public static final int btn_buy_good=0x7f0a0090;
+ public static final int btn_commit=0x7f0a00b6;
+ public static final int btn_contact=0x7f0a004d;
+ public static final int btn_dlg_ok=0x7f0a008c;
+ public static final int btn_feedback_submit=0x7f0a001b;
+ public static final int btn_hide_ads=0x7f0a0022;
+ public static final int btn_login=0x7f0a002b;
+ public static final int btn_look_goods=0x7f0a0072;
+ public static final int btn_look_news=0x7f0a0073;
+ public static final int btn_look_shops=0x7f0a0071;
+ public static final int btn_look_users=0x7f0a0070;
+ public static final int btn_order_count_less=0x7f0a0055;
+ public static final int btn_order_count_more=0x7f0a0057;
+ public static final int btn_order_submit=0x7f0a005c;
+ public static final int btn_publish=0x7f0a0017;
+ public static final int btn_qq=0x7f0a002f;
+ public static final int btn_reg_now=0x7f0a0065;
+ public static final int btn_register=0x7f0a002e;
+ public static final int btn_set_time=0x7f0a0059;
+ public static final int btn_share=0x7f0a004e;
+ public static final int cancel=0x7f0a00b9;
+ public static final int cb_rem_psd=0x7f0a002d;
+ public static final int comment_commit=0x7f0a0016;
+ public static final int comment_content=0x7f0a0015;
+ public static final int comment_item=0x7f0a0011;
+ public static final int comment_list=0x7f0a0012;
+ public static final int commit_scroll=0x7f0a0010;
+ public static final int content_comment=0x7f0a0085;
+ public static final int content_image=0x7f0a007d;
+ public static final int content_text=0x7f0a007c;
+ public static final int datepicker=0x7f0a008a;
+ public static final int edit_content=0x7f0a0019;
+ public static final int edit_title=0x7f0a0018;
+ public static final int et_comfirm_psd=0x7f0a0060;
+ public static final int et_commit=0x7f0a00b5;
+ public static final int et_feedback_content=0x7f0a001a;
+ public static final int et_mineinfo_cademy=0x7f0a0040;
+ public static final int et_mineinfo_dornum=0x7f0a0042;
+ public static final int et_mineinfo_dorpart=0x7f0a0041;
+ public static final int et_mineinfo_phone=0x7f0a0043;
+ public static final int et_mineinfo_qq=0x7f0a0044;
+ public static final int et_mineinfo_school=0x7f0a003f;
+ public static final int et_mineinfo_username=0x7f0a003e;
+ public static final int et_order_phone=0x7f0a005a;
+ public static final int et_order_words=0x7f0a005b;
+ public static final int et_password=0x7f0a0029;
+ public static final int et_phone=0x7f0a0063;
+ public static final int et_username=0x7f0a0026;
+ public static final int fl_image_ads=0x7f0a0020;
+ public static final int gv_classroom=0x7f0a000e;
+ public static final int gv_food_class=0x7f0a0068;
+ public static final int gv_gift_class=0x7f0a0067;
+ public static final int gv_out_class=0x7f0a0069;
+ public static final int gv_school_class=0x7f0a0066;
+ public static final int header_shop_all=0x7f0a006a;
+ public static final int imageview=0x7f0a00a9;
+ public static final int img_call=0x7f0a00b0;
+ public static final int img_chooseImage=0x7f0a00a8;
+ public static final int img_date=0x7f0a001d;
+ public static final int img_item=0x7f0a0098;
+ public static final int img_search=0x7f0a0096;
+ public static final int img_shop=0x7f0a00a1;
+ public static final int img_welcome=0x7f0a0001;
+ public static final int index_comment=0x7f0a0084;
+ public static final int item_action_comment=0x7f0a007e;
+ public static final int item_action_hate=0x7f0a0080;
+ public static final int item_action_love=0x7f0a0081;
+ public static final int item_action_share=0x7f0a007f;
+ public static final int listScrollView=0x7f0a001c;
+ public static final int ll_commit_parent_view=0x7f0a00b4;
+ public static final int ll_commit_son_view=0x7f0a0087;
+ public static final int ll_row1=0x7f0a0024;
+ public static final int ll_row2=0x7f0a0027;
+ public static final int ll_row3=0x7f0a002a;
+ public static final int ll_row4=0x7f0a0061;
+ public static final int ll_row6=0x7f0a0064;
+ public static final int loadmore=0x7f0a0013;
+ public static final int lv_bxt_news=0x7f0a0003;
+ public static final int lv_goods_list=0x7f0a00ab;
+ public static final int lv_mine_about=0x7f0a0036;
+ public static final int lv_mine_order=0x7f0a0035;
+ public static final int lv_mine_soft=0x7f0a006e;
+ public static final int lv_mine_user=0x7f0a0034;
+ public static final int lv_news=0x7f0a0023;
+ public static final int lv_order_info=0x7f0a005d;
+ public static final int lv_shop_all=0x7f0a006b;
+ public static final int modify=0x7f0a00b8;
+ public static final int new_login_btn=0x7f0a0030;
+ public static final int pagertab=0x7f0a006d;
+ public static final int pull_refresh_list=0x7f0a0002;
+ public static final int ratingBar1=0x7f0a00ad;
+ public static final int rb_rate=0x7f0a00a7;
+ public static final int relaGrid=0x7f0a0091;
+ public static final int rl_last=0x7f0a002c;
+ public static final int rl_splash=0x7f0a006f;
+ public static final int rl_welcome=0x7f0a0000;
+ public static final int sp_bxt_header=0x7f0a0094;
+ public static final int textview=0x7f0a00aa;
+ public static final int time_comment=0x7f0a0086;
+ public static final int time_text=0x7f0a007a;
+ public static final int timepicker=0x7f0a008b;
+ public static final int title_text=0x7f0a007b;
+ public static final int tp_dlg_time=0x7f0a008d;
+ public static final int tv_bowl=0x7f0a0046;
+ public static final int tv_bxt_news_holder1=0x7f0a0009;
+ public static final int tv_bxt_news_holder2=0x7f0a000a;
+ public static final int tv_bxt_news_item_title=0x7f0a0082;
+ public static final int tv_bxt_news_loc=0x7f0a0008;
+ public static final int tv_bxt_news_point=0x7f0a000b;
+ public static final int tv_bxt_news_speaker=0x7f0a0006;
+ public static final int tv_bxt_news_speaker_info=0x7f0a000c;
+ public static final int tv_bxt_news_time=0x7f0a0007;
+ public static final int tv_bxt_news_title=0x7f0a0004;
+ public static final int tv_bxt_news_topic=0x7f0a0005;
+ public static final int tv_cademy=0x7f0a0049;
+ public static final int tv_chooseText=0x7f0a0092;
+ public static final int tv_comfirm_psd=0x7f0a005f;
+ public static final int tv_commit_content=0x7f0a0089;
+ public static final int tv_commit_title=0x7f0a00b3;
+ public static final int tv_commit_user=0x7f0a0088;
+ public static final int tv_day=0x7f0a001f;
+ public static final int tv_dorNum=0x7f0a004b;
+ public static final int tv_dorPart=0x7f0a004a;
+ public static final int tv_edit=0x7f0a0095;
+ public static final int tv_good_name=0x7f0a008e;
+ public static final int tv_good_price=0x7f0a008f;
+ public static final int tv_item_content=0x7f0a009a;
+ public static final int tv_item_name=0x7f0a0099;
+ public static final int tv_me=0x7f0a0045;
+ public static final int tv_mineinfo_cademy=0x7f0a0039;
+ public static final int tv_mineinfo_dornum=0x7f0a003b;
+ public static final int tv_mineinfo_dorpart=0x7f0a003a;
+ public static final int tv_mineinfo_phone=0x7f0a003c;
+ public static final int tv_mineinfo_qq=0x7f0a003d;
+ public static final int tv_mineinfo_school=0x7f0a0038;
+ public static final int tv_mineinfo_username=0x7f0a0037;
+ public static final int tv_news_author=0x7f0a0050;
+ public static final int tv_news_content=0x7f0a0052;
+ public static final int tv_news_date=0x7f0a009c;
+ public static final int tv_news_time=0x7f0a0051;
+ public static final int tv_news_title=0x7f0a004f;
+ public static final int tv_news_type=0x7f0a009b;
+ public static final int tv_order_count=0x7f0a0056;
+ public static final int tv_order_good=0x7f0a0054;
+ public static final int tv_order_info_good_name=0x7f0a009d;
+ public static final int tv_order_info_price=0x7f0a009f;
+ public static final int tv_order_info_shop_name=0x7f0a009e;
+ public static final int tv_order_info_state=0x7f0a00a0;
+ public static final int tv_order_shop=0x7f0a0053;
+ public static final int tv_order_time=0x7f0a0058;
+ public static final int tv_password=0x7f0a0028;
+ public static final int tv_phone=0x7f0a0062;
+ public static final int tv_reg_title=0x7f0a005e;
+ public static final int tv_res=0x7f0a0078;
+ public static final int tv_room=0x7f0a0097;
+ public static final int tv_school=0x7f0a0048;
+ public static final int tv_shop_discount=0x7f0a00a4;
+ public static final int tv_shop_introduce=0x7f0a00b1;
+ public static final int tv_shop_loc=0x7f0a00a6;
+ public static final int tv_shop_location=0x7f0a00ae;
+ public static final int tv_shop_name=0x7f0a00a2;
+ public static final int tv_shop_paper=0x7f0a00a3;
+ public static final int tv_shop_phone=0x7f0a00af;
+ public static final int tv_shop_promotion=0x7f0a00b2;
+ public static final int tv_shop_title=0x7f0a00ac;
+ public static final int tv_shop_type=0x7f0a00a5;
+ public static final int tv_title=0x7f0a0077;
+ public static final int tv_username=0x7f0a0025;
+ public static final int tv_week=0x7f0a001e;
+ public static final int tv_xiaocai=0x7f0a0047;
+ public static final int userName_comment=0x7f0a0083;
+ public static final int user_callback=0x7f0a0033;
+ public static final int user_logo=0x7f0a0032;
+ public static final int user_name=0x7f0a0079;
+ public static final int user_nickname=0x7f0a0031;
+ public static final int view_pager=0x7f0a0021;
+ public static final int viewpager=0x7f0a006c;
+ public static final int wv_wsq=0x7f0a000d;
+ }
+ public static final class layout {
+ public static final int activity_about=0x7f030000;
+ public static final int activity_award=0x7f030001;
+ public static final int activity_base=0x7f030002;
+ public static final int activity_bxt=0x7f030003;
+ public static final int activity_bxt_news=0x7f030004;
+ public static final int activity_car=0x7f030005;
+ public static final int activity_classroom=0x7f030006;
+ public static final int activity_comment=0x7f030007;
+ public static final int activity_edit=0x7f030008;
+ public static final int activity_feedback=0x7f030009;
+ public static final int activity_home=0x7f03000a;
+ public static final int activity_login=0x7f03000b;
+ public static final int activity_mine=0x7f03000c;
+ public static final int activity_mine_info=0x7f03000d;
+ public static final int activity_mine_info_edit=0x7f03000e;
+ public static final int activity_mine_old=0x7f03000f;
+ public static final int activity_news=0x7f030010;
+ public static final int activity_order=0x7f030011;
+ public static final int activity_order_info=0x7f030012;
+ public static final int activity_reg=0x7f030013;
+ public static final int activity_shop=0x7f030014;
+ public static final int activity_shop_all=0x7f030015;
+ public static final int activity_shop_item=0x7f030016;
+ public static final int activity_soft=0x7f030017;
+ public static final int activity_splash=0x7f030018;
+ public static final int activity_test=0x7f030019;
+ public static final int activity_userinfo=0x7f03001a;
+ public static final int ai_item=0x7f03001b;
+ public static final int bxt_list_item=0x7f03001c;
+ public static final int comment_item=0x7f03001d;
+ public static final int commit=0x7f03001e;
+ public static final int common_datetime=0x7f03001f;
+ public static final int dlg_order_settime=0x7f030020;
+ public static final int goods_list_item=0x7f030021;
+ public static final int gv_item_classroom=0x7f030022;
+ public static final int header_award=0x7f030023;
+ public static final int header_bxt=0x7f030024;
+ public static final int header_bxt_news=0x7f030025;
+ public static final int header_feedback=0x7f030026;
+ public static final int header_home=0x7f030027;
+ public static final int header_mine=0x7f030028;
+ public static final int header_mine_info=0x7f030029;
+ public static final int header_mine_info_edit=0x7f03002a;
+ public static final int header_news=0x7f03002b;
+ public static final int header_order=0x7f03002c;
+ public static final int header_order_info=0x7f03002d;
+ public static final int header_shop=0x7f03002e;
+ public static final int header_shop_all=0x7f03002f;
+ public static final int header_soft=0x7f030030;
+ public static final int layout_reservation=0x7f030031;
+ public static final int mine_list_item=0x7f030032;
+ public static final int mine_soft_list_item=0x7f030033;
+ public static final int news_list_item=0x7f030034;
+ public static final int order_info_list_item=0x7f030035;
+ public static final int popmenu=0x7f030036;
+ public static final int scom_list_item=0x7f030037;
+ public static final int shop_all_list_item=0x7f030038;
+ public static final int shop_grid_item=0x7f030039;
+ public static final int tab_widget_item=0x7f03003a;
+ public static final int viewpager_menu=0x7f03003b;
+ public static final int viewpager_shopinfo=0x7f03003c;
+ }
+ public static final class menu {
+ public static final int main=0x7f090000;
+ public static final int popup=0x7f090001;
+ }
+ public static final class string {
+ public static final int action_settings=0x7f070001;
+ public static final int app_name=0x7f070000;
+ public static final int hello_world=0x7f070002;
+ }
+ public static final class style {
+ /**
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+
+ API 11 theme customizations can go here.
+
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+
+ API 14 theme customizations can go here.
+ */
+ public static final int AppBaseTheme=0x7f080000;
+ public static final int AppNoTitleBarTheme=0x7f080003;
+ public static final int AppTheme=0x7f080001;
+ /** 自定义对话框的样式
+ */
+ public static final int MyDialog=0x7f080004;
+ public static final int NoTitleBarTheme=0x7f080002;
+ /** 自定义对话框样式
+
+ */
+ public static final int TextTheme=0x7f080006;
+ public static final int TextTheme_tipstheme_second=0x7f080007;
+ /** 自定义RatingBar样式
+ */
+ public static final int custom_ratingbar_style=0x7f080005;
+ }
+}
diff --git a/代码/在这里2.1/ic_launcher-web.png b/代码/在这里2.1/ic_launcher-web.png
new file mode 100644
index 0000000..e53f92f
Binary files /dev/null and b/代码/在这里2.1/ic_launcher-web.png differ
diff --git a/代码/在这里2.1/libs/BmobSDK_V3.3.4_0310.jar b/代码/在这里2.1/libs/BmobSDK_V3.3.4_0310.jar
new file mode 100644
index 0000000..0e4efda
Binary files /dev/null and b/代码/在这里2.1/libs/BmobSDK_V3.3.4_0310.jar differ
diff --git a/代码/在这里2.1/libs/android-support-v4.jar b/代码/在这里2.1/libs/android-support-v4.jar
new file mode 100644
index 0000000..9056828
Binary files /dev/null and b/代码/在这里2.1/libs/android-support-v4.jar differ
diff --git a/代码/在这里2.1/libs/bmobPush_0.1beta.jar b/代码/在这里2.1/libs/bmobPush_0.1beta.jar
new file mode 100644
index 0000000..1d64f33
Binary files /dev/null and b/代码/在这里2.1/libs/bmobPush_0.1beta.jar differ
diff --git a/代码/在这里2.1/libs/mta-sdk-1.6.2.jar b/代码/在这里2.1/libs/mta-sdk-1.6.2.jar
new file mode 100644
index 0000000..49b7787
Binary files /dev/null and b/代码/在这里2.1/libs/mta-sdk-1.6.2.jar differ
diff --git a/代码/在这里2.1/libs/open_sdk_r5756.jar b/代码/在这里2.1/libs/open_sdk_r5756.jar
new file mode 100644
index 0000000..72daab6
Binary files /dev/null and b/代码/在这里2.1/libs/open_sdk_r5756.jar differ
diff --git a/代码/在这里2.1/lint.xml b/代码/在这里2.1/lint.xml
new file mode 100644
index 0000000..9d72abb
--- /dev/null
+++ b/代码/在这里2.1/lint.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/proguard-project.txt b/代码/在这里2.1/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/代码/在这里2.1/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# 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 *;
+#}
diff --git a/代码/在这里2.1/project.properties b/代码/在这里2.1/project.properties
new file mode 100644
index 0000000..ef6ccd3
--- /dev/null
+++ b/代码/在这里2.1/project.properties
@@ -0,0 +1,15 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-21
+proguard.config=proguard.cfg
diff --git a/代码/在这里2.1/res/anim/cycle_7.xml b/代码/在这里2.1/res/anim/cycle_7.xml
new file mode 100644
index 0000000..57932a8
--- /dev/null
+++ b/代码/在这里2.1/res/anim/cycle_7.xml
@@ -0,0 +1,3 @@
+
+
diff --git a/代码/在这里2.1/res/anim/scale.xml b/代码/在这里2.1/res/anim/scale.xml
new file mode 100644
index 0000000..77cdc91
--- /dev/null
+++ b/代码/在这里2.1/res/anim/scale.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/anim/shake.xml b/代码/在这里2.1/res/anim/shake.xml
new file mode 100644
index 0000000..4352ab2
--- /dev/null
+++ b/代码/在这里2.1/res/anim/shake.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/drawable-hdpi/action_hate.png b/代码/在这里2.1/res/drawable-hdpi/action_hate.png
new file mode 100644
index 0000000..95ac147
Binary files /dev/null and b/代码/在这里2.1/res/drawable-hdpi/action_hate.png differ
diff --git a/代码/在这里2.1/res/drawable-hdpi/action_rate.png b/代码/在这里2.1/res/drawable-hdpi/action_rate.png
new file mode 100644
index 0000000..74e9c98
Binary files /dev/null and b/代码/在这里2.1/res/drawable-hdpi/action_rate.png differ
diff --git a/代码/在这里2.1/res/drawable-hdpi/default_ptr_flip.png b/代码/在这里2.1/res/drawable-hdpi/default_ptr_flip.png
new file mode 100644
index 0000000..0a2c0bd
Binary files /dev/null and b/代码/在这里2.1/res/drawable-hdpi/default_ptr_flip.png differ
diff --git a/代码/在这里2.1/res/drawable-hdpi/default_ptr_rotate.png b/代码/在这里2.1/res/drawable-hdpi/default_ptr_rotate.png
new file mode 100644
index 0000000..dc641b7
Binary files /dev/null and b/代码/在这里2.1/res/drawable-hdpi/default_ptr_rotate.png differ
diff --git a/代码/在这里2.1/res/drawable-hdpi/ic_launcher.png b/代码/在这里2.1/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..e53f92f
Binary files /dev/null and b/代码/在这里2.1/res/drawable-hdpi/ic_launcher.png differ
diff --git a/代码/在这里2.1/res/drawable-hdpi/indicator_arrow.png b/代码/在这里2.1/res/drawable-hdpi/indicator_arrow.png
new file mode 100644
index 0000000..8ae7977
Binary files /dev/null and b/代码/在这里2.1/res/drawable-hdpi/indicator_arrow.png differ
diff --git a/代码/在这里2.1/res/drawable-mdpi/default_ptr_flip.png b/代码/在这里2.1/res/drawable-mdpi/default_ptr_flip.png
new file mode 100644
index 0000000..be696c1
Binary files /dev/null and b/代码/在这里2.1/res/drawable-mdpi/default_ptr_flip.png differ
diff --git a/代码/在这里2.1/res/drawable-mdpi/default_ptr_rotate.png b/代码/在这里2.1/res/drawable-mdpi/default_ptr_rotate.png
new file mode 100644
index 0000000..95b22bd
Binary files /dev/null and b/代码/在这里2.1/res/drawable-mdpi/default_ptr_rotate.png differ
diff --git a/代码/在这里2.1/res/drawable-mdpi/ic_launcher.png b/代码/在这里2.1/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..e53f92f
Binary files /dev/null and b/代码/在这里2.1/res/drawable-mdpi/ic_launcher.png differ
diff --git a/代码/在这里2.1/res/drawable-mdpi/indicator_arrow.png b/代码/在这里2.1/res/drawable-mdpi/indicator_arrow.png
new file mode 100644
index 0000000..20fe2c1
Binary files /dev/null and b/代码/在这里2.1/res/drawable-mdpi/indicator_arrow.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/bg_account.9.png b/代码/在这里2.1/res/drawable-xhdpi/bg_account.9.png
new file mode 100644
index 0000000..5e95f97
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/bg_account.9.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/bg_account_focus.9.png b/代码/在这里2.1/res/drawable-xhdpi/bg_account_focus.9.png
new file mode 100644
index 0000000..da1b2fe
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/bg_account_focus.9.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/bg_account_normal.9.png b/代码/在这里2.1/res/drawable-xhdpi/bg_account_normal.9.png
new file mode 100644
index 0000000..4ea2b4f
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/bg_account_normal.9.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/bg_comment_comment.9.png b/代码/在这里2.1/res/drawable-xhdpi/bg_comment_comment.9.png
new file mode 100644
index 0000000..5020fb7
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/bg_comment_comment.9.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/bg_comment_floor.9.png b/代码/在这里2.1/res/drawable-xhdpi/bg_comment_floor.9.png
new file mode 100644
index 0000000..240b4b7
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/bg_comment_floor.9.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/bg_logout_normal.9.png b/代码/在这里2.1/res/drawable-xhdpi/bg_logout_normal.9.png
new file mode 100644
index 0000000..07ccf36
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/bg_logout_normal.9.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/bg_logout_pressed.9.png b/代码/在这里2.1/res/drawable-xhdpi/bg_logout_pressed.9.png
new file mode 100644
index 0000000..685b44e
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/bg_logout_pressed.9.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/btn_comment_publish.png b/代码/在这里2.1/res/drawable-xhdpi/btn_comment_publish.png
new file mode 100644
index 0000000..e857989
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/btn_comment_publish.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/default_ptr_flip.png b/代码/在这里2.1/res/drawable-xhdpi/default_ptr_flip.png
new file mode 100644
index 0000000..3e6ddba
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/default_ptr_flip.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/default_ptr_rotate.png b/代码/在这里2.1/res/drawable-xhdpi/default_ptr_rotate.png
new file mode 100644
index 0000000..00225c9
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/default_ptr_rotate.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/ic_action_comment.png b/代码/在这里2.1/res/drawable-xhdpi/ic_action_comment.png
new file mode 100644
index 0000000..746cacd
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/ic_action_comment.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/ic_action_edit.png b/代码/在这里2.1/res/drawable-xhdpi/ic_action_edit.png
new file mode 100644
index 0000000..e9c14ec
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/ic_action_edit.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav.png b/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav.png
new file mode 100644
index 0000000..6b6caec
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav_choose.png b/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav_choose.png
new file mode 100644
index 0000000..701b1d3
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav_choose.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav_normal.png b/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav_normal.png
new file mode 100644
index 0000000..0e696bf
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/ic_action_fav_normal.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/ic_action_love.png b/代码/在这里2.1/res/drawable-xhdpi/ic_action_love.png
new file mode 100644
index 0000000..93a6251
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/ic_action_love.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/ic_action_share.png b/代码/在这里2.1/res/drawable-xhdpi/ic_action_share.png
new file mode 100644
index 0000000..030a5e0
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/ic_action_share.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/ic_launcher.png b/代码/在这里2.1/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..e53f92f
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/indicator_arrow.png b/代码/在这里2.1/res/drawable-xhdpi/indicator_arrow.png
new file mode 100644
index 0000000..810ff59
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/indicator_arrow.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/user_icon_default.png b/代码/在这里2.1/res/drawable-xhdpi/user_icon_default.png
new file mode 100644
index 0000000..f4cff6b
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/user_icon_default.png differ
diff --git a/代码/在这里2.1/res/drawable-xhdpi/user_icon_default_main.png b/代码/在这里2.1/res/drawable-xhdpi/user_icon_default_main.png
new file mode 100644
index 0000000..cb16439
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xhdpi/user_icon_default_main.png differ
diff --git a/代码/在这里2.1/res/drawable-xxhdpi/ic_launcher.png b/代码/在这里2.1/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..e53f92f
Binary files /dev/null and b/代码/在这里2.1/res/drawable-xxhdpi/ic_launcher.png differ
diff --git a/代码/在这里2.1/res/drawable/abs__tab_selected_focused_holo.9.png b/代码/在这里2.1/res/drawable/abs__tab_selected_focused_holo.9.png
new file mode 100644
index 0000000..140ebfd
Binary files /dev/null and b/代码/在这里2.1/res/drawable/abs__tab_selected_focused_holo.9.png differ
diff --git a/代码/在这里2.1/res/drawable/abs__tab_selected_holo.9.png b/代码/在这里2.1/res/drawable/abs__tab_selected_holo.9.png
new file mode 100644
index 0000000..a94f098
Binary files /dev/null and b/代码/在这里2.1/res/drawable/abs__tab_selected_holo.9.png differ
diff --git a/代码/在这里2.1/res/drawable/abs__tab_selected_pressed_holo.9.png b/代码/在这里2.1/res/drawable/abs__tab_selected_pressed_holo.9.png
new file mode 100644
index 0000000..25ec789
Binary files /dev/null and b/代码/在这里2.1/res/drawable/abs__tab_selected_pressed_holo.9.png differ
diff --git a/代码/在这里2.1/res/drawable/abs__tab_unselected_pressed_holo.9.png b/代码/在这里2.1/res/drawable/abs__tab_unselected_pressed_holo.9.png
new file mode 100644
index 0000000..3e7f9e4
Binary files /dev/null and b/代码/在这里2.1/res/drawable/abs__tab_unselected_pressed_holo.9.png differ
diff --git a/代码/在这里2.1/res/drawable/actionbar_background.xml b/代码/在这里2.1/res/drawable/actionbar_background.xml
new file mode 100644
index 0000000..3c81fbb
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/actionbar_background.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/drawable/bg1.jpg b/代码/在这里2.1/res/drawable/bg1.jpg
new file mode 100644
index 0000000..cbb06e0
Binary files /dev/null and b/代码/在这里2.1/res/drawable/bg1.jpg differ
diff --git a/代码/在这里2.1/res/drawable/bg3.jpg b/代码/在这里2.1/res/drawable/bg3.jpg
new file mode 100644
index 0000000..69333a7
Binary files /dev/null and b/代码/在这里2.1/res/drawable/bg3.jpg differ
diff --git a/代码/在这里2.1/res/drawable/btn_green_normal.png b/代码/在这里2.1/res/drawable/btn_green_normal.png
new file mode 100644
index 0000000..3297518
Binary files /dev/null and b/代码/在这里2.1/res/drawable/btn_green_normal.png differ
diff --git a/代码/在这里2.1/res/drawable/btn_green_pressed.png b/代码/在这里2.1/res/drawable/btn_green_pressed.png
new file mode 100644
index 0000000..a2c1e43
Binary files /dev/null and b/代码/在这里2.1/res/drawable/btn_green_pressed.png differ
diff --git a/代码/在这里2.1/res/drawable/checkbox_bg1.xml b/代码/在这里2.1/res/drawable/checkbox_bg1.xml
new file mode 100644
index 0000000..24e98f1
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/checkbox_bg1.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/checkbox_selected.png b/代码/在这里2.1/res/drawable/checkbox_selected.png
new file mode 100644
index 0000000..54b74dc
Binary files /dev/null and b/代码/在这里2.1/res/drawable/checkbox_selected.png differ
diff --git a/代码/在这里2.1/res/drawable/checkbox_selected_press.png b/代码/在这里2.1/res/drawable/checkbox_selected_press.png
new file mode 100644
index 0000000..6d5756a
Binary files /dev/null and b/代码/在这里2.1/res/drawable/checkbox_selected_press.png differ
diff --git a/代码/在这里2.1/res/drawable/checkbox_unselect.png b/代码/在这里2.1/res/drawable/checkbox_unselect.png
new file mode 100644
index 0000000..9185ada
Binary files /dev/null and b/代码/在这里2.1/res/drawable/checkbox_unselect.png differ
diff --git a/代码/在这里2.1/res/drawable/checkbox_unselect_press.png b/代码/在这里2.1/res/drawable/checkbox_unselect_press.png
new file mode 100644
index 0000000..0bf72e9
Binary files /dev/null and b/代码/在这里2.1/res/drawable/checkbox_unselect_press.png differ
diff --git a/代码/在这里2.1/res/drawable/custom_ratingbar.xml b/代码/在这里2.1/res/drawable/custom_ratingbar.xml
new file mode 100644
index 0000000..ab2cf58
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/custom_ratingbar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/drawable/edittext_focus.xml b/代码/在这里2.1/res/drawable/edittext_focus.xml
new file mode 100644
index 0000000..45eb049
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/edittext_focus.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/edittext_normal.xml b/代码/在这里2.1/res/drawable/edittext_normal.xml
new file mode 100644
index 0000000..a10c381
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/edittext_normal.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/ic_1.png b/代码/在这里2.1/res/drawable/ic_1.png
new file mode 100644
index 0000000..9ccc4da
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_1.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_2.png b/代码/在这里2.1/res/drawable/ic_2.png
new file mode 100644
index 0000000..bc9f9ff
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_2.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_3.png b/代码/在这里2.1/res/drawable/ic_3.png
new file mode 100644
index 0000000..1192560
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_3.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_41.png b/代码/在这里2.1/res/drawable/ic_41.png
new file mode 100644
index 0000000..2809275
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_41.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_42.png b/代码/在这里2.1/res/drawable/ic_42.png
new file mode 100644
index 0000000..c4c3fe5
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_42.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_5.png b/代码/在这里2.1/res/drawable/ic_5.png
new file mode 100644
index 0000000..32e9ab3
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_5.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_6.png b/代码/在这里2.1/res/drawable/ic_6.png
new file mode 100644
index 0000000..4172b94
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_6.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_7.png b/代码/在这里2.1/res/drawable/ic_7.png
new file mode 100644
index 0000000..ccfabb4
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_7.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_8.png b/代码/在这里2.1/res/drawable/ic_8.png
new file mode 100644
index 0000000..609d322
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_8.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_app.png b/代码/在这里2.1/res/drawable/ic_app.png
new file mode 100644
index 0000000..cb4a403
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_app.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_app1.png b/代码/在这里2.1/res/drawable/ic_app1.png
new file mode 100644
index 0000000..e53f92f
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_app1.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner1.png b/代码/在这里2.1/res/drawable/ic_banner1.png
new file mode 100644
index 0000000..e53f92f
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner1.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_hide.png b/代码/在这里2.1/res/drawable/ic_banner_hide.png
new file mode 100644
index 0000000..cb4a403
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_hide.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_image_default1.png b/代码/在这里2.1/res/drawable/ic_banner_image_default1.png
new file mode 100644
index 0000000..5f4b680
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_image_default1.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_image_default11.png b/代码/在这里2.1/res/drawable/ic_banner_image_default11.png
new file mode 100644
index 0000000..48b457e
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_image_default11.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_image_default2.png b/代码/在这里2.1/res/drawable/ic_banner_image_default2.png
new file mode 100644
index 0000000..51cdab6
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_image_default2.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_image_default22.png b/代码/在这里2.1/res/drawable/ic_banner_image_default22.png
new file mode 100644
index 0000000..90c6304
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_image_default22.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_image_default3.png b/代码/在这里2.1/res/drawable/ic_banner_image_default3.png
new file mode 100644
index 0000000..9c265c7
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_image_default3.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_image_default4.png b/代码/在这里2.1/res/drawable/ic_banner_image_default4.png
new file mode 100644
index 0000000..a2a3229
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_image_default4.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_image_default55.png b/代码/在这里2.1/res/drawable/ic_banner_image_default55.png
new file mode 100644
index 0000000..4ce9b4f
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_image_default55.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_banner_image_default77.png b/代码/在这里2.1/res/drawable/ic_banner_image_default77.png
new file mode 100644
index 0000000..49bda9c
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_banner_image_default77.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_breakfast.png b/代码/在这里2.1/res/drawable/ic_breakfast.png
new file mode 100644
index 0000000..82a0eae
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_breakfast.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_car.png b/代码/在这里2.1/res/drawable/ic_car.png
new file mode 100644
index 0000000..f6e6b53
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_car.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_date.png b/代码/在这里2.1/res/drawable/ic_date.png
new file mode 100644
index 0000000..1ce7f73
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_date.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_hbut.png b/代码/在这里2.1/res/drawable/ic_hbut.png
new file mode 100644
index 0000000..dfc211b
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_hbut.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_hide.png b/代码/在这里2.1/res/drawable/ic_hide.png
new file mode 100644
index 0000000..f6b6fb9
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_hide.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_loc.png b/代码/在这里2.1/res/drawable/ic_loc.png
new file mode 100644
index 0000000..080c76a
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_loc.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_menu_copy_holo_light.png b/代码/在这里2.1/res/drawable/ic_menu_copy_holo_light.png
new file mode 100644
index 0000000..0dd8865
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_menu_copy_holo_light.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_menu_find_holo_light.png b/代码/在这里2.1/res/drawable/ic_menu_find_holo_light.png
new file mode 100644
index 0000000..efee6df
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_menu_find_holo_light.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_menu_info_details.png b/代码/在这里2.1/res/drawable/ic_menu_info_details.png
new file mode 100644
index 0000000..6a7a1e9
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_menu_info_details.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_menu_myplaces.png b/代码/在这里2.1/res/drawable/ic_menu_myplaces.png
new file mode 100644
index 0000000..ade7532
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_menu_myplaces.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_menu_notifications.png b/代码/在这里2.1/res/drawable/ic_menu_notifications.png
new file mode 100644
index 0000000..ded4323
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_menu_notifications.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_menu_share.png b/代码/在这里2.1/res/drawable/ic_menu_share.png
new file mode 100644
index 0000000..2837615
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_menu_share.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_mine.png b/代码/在这里2.1/res/drawable/ic_mine.png
new file mode 100644
index 0000000..08e701b
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_mine.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_page_indicator.png b/代码/在这里2.1/res/drawable/ic_page_indicator.png
new file mode 100644
index 0000000..6204a24
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_page_indicator.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_page_indicator_focused.png b/代码/在这里2.1/res/drawable/ic_page_indicator_focused.png
new file mode 100644
index 0000000..f75c2e1
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_page_indicator_focused.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_phone.png b/代码/在这里2.1/res/drawable/ic_phone.png
new file mode 100644
index 0000000..91d3d2b
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_phone.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_phone2.png b/代码/在这里2.1/res/drawable/ic_phone2.png
new file mode 100644
index 0000000..19c6769
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_phone2.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_phone3.png b/代码/在这里2.1/res/drawable/ic_phone3.png
new file mode 100644
index 0000000..c3c55dc
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_phone3.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_sale.png b/代码/在这里2.1/res/drawable/ic_sale.png
new file mode 100644
index 0000000..1c4518e
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_sale.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_search.png b/代码/在这里2.1/res/drawable/ic_search.png
new file mode 100644
index 0000000..9f6df03
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_search.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_shelf_category_divider.png b/代码/在这里2.1/res/drawable/ic_shelf_category_divider.png
new file mode 100644
index 0000000..836688a
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_shelf_category_divider.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_shop.png b/代码/在这里2.1/res/drawable/ic_shop.png
new file mode 100644
index 0000000..129e2c2
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_shop.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_shop_info_bg.jpg b/代码/在这里2.1/res/drawable/ic_shop_info_bg.jpg
new file mode 100644
index 0000000..2d84e7c
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_shop_info_bg.jpg differ
diff --git a/代码/在这里2.1/res/drawable/ic_shop_info_bg2.jpg b/代码/在这里2.1/res/drawable/ic_shop_info_bg2.jpg
new file mode 100644
index 0000000..566f0e1
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_shop_info_bg2.jpg differ
diff --git a/代码/在这里2.1/res/drawable/ic_shop_info_bg22.jpg b/代码/在这里2.1/res/drawable/ic_shop_info_bg22.jpg
new file mode 100644
index 0000000..9ec3fd3
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_shop_info_bg22.jpg differ
diff --git a/代码/在这里2.1/res/drawable/ic_star_no.png b/代码/在这里2.1/res/drawable/ic_star_no.png
new file mode 100644
index 0000000..303c979
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_star_no.png differ
diff --git a/代码/在这里2.1/res/drawable/ic_star_yes.png b/代码/在这里2.1/res/drawable/ic_star_yes.png
new file mode 100644
index 0000000..add85d5
Binary files /dev/null and b/代码/在这里2.1/res/drawable/ic_star_yes.png differ
diff --git a/代码/在这里2.1/res/drawable/login_button.png b/代码/在这里2.1/res/drawable/login_button.png
new file mode 100644
index 0000000..756a4ce
Binary files /dev/null and b/代码/在这里2.1/res/drawable/login_button.png differ
diff --git a/代码/在这里2.1/res/drawable/login_button_select.png b/代码/在这里2.1/res/drawable/login_button_select.png
new file mode 100644
index 0000000..5e946a4
Binary files /dev/null and b/代码/在这里2.1/res/drawable/login_button_select.png differ
diff --git a/代码/在这里2.1/res/drawable/qq.png b/代码/在这里2.1/res/drawable/qq.png
new file mode 100644
index 0000000..c65c220
Binary files /dev/null and b/代码/在这里2.1/res/drawable/qq.png differ
diff --git a/代码/在这里2.1/res/drawable/selector_edittext.xml b/代码/在这里2.1/res/drawable/selector_edittext.xml
new file mode 100644
index 0000000..c700112
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/selector_edittext.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/selector_edittext_account.xml b/代码/在这里2.1/res/drawable/selector_edittext_account.xml
new file mode 100644
index 0000000..4cd6c3f
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/selector_edittext_account.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/selector_load_more.xml b/代码/在这里2.1/res/drawable/selector_load_more.xml
new file mode 100644
index 0000000..48bfcff
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/selector_load_more.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/drawable/selector_logout.xml b/代码/在这里2.1/res/drawable/selector_logout.xml
new file mode 100644
index 0000000..3ca65b9
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/selector_logout.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/drawable/shap_circle.xml b/代码/在这里2.1/res/drawable/shap_circle.xml
new file mode 100644
index 0000000..5da73a6
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/shap_circle.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/shap_divider.xml b/代码/在这里2.1/res/drawable/shap_divider.xml
new file mode 100644
index 0000000..01c2205
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/shap_divider.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/shape_color_frame.xml b/代码/在这里2.1/res/drawable/shape_color_frame.xml
new file mode 100644
index 0000000..43ddd6e
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/shape_color_frame.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/shape_grid_item.xml b/代码/在这里2.1/res/drawable/shape_grid_item.xml
new file mode 100644
index 0000000..2f9482e
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/shape_grid_item.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/shape_left_radius_color_square.xml b/代码/在这里2.1/res/drawable/shape_left_radius_color_square.xml
new file mode 100644
index 0000000..7c6d37b
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/shape_left_radius_color_square.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/shape_radius.xml b/代码/在这里2.1/res/drawable/shape_radius.xml
new file mode 100644
index 0000000..ac0596b
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/shape_radius.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/shape_radius_color_square.xml b/代码/在这里2.1/res/drawable/shape_radius_color_square.xml
new file mode 100644
index 0000000..6693a5e
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/shape_radius_color_square.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/shape_radius_square.xml b/代码/在这里2.1/res/drawable/shape_radius_square.xml
new file mode 100644
index 0000000..041ac07
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/shape_radius_square.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/splash.png b/代码/在这里2.1/res/drawable/splash.png
new file mode 100644
index 0000000..e9755b2
Binary files /dev/null and b/代码/在这里2.1/res/drawable/splash.png differ
diff --git a/代码/在这里2.1/res/drawable/star_img1.jpg b/代码/在这里2.1/res/drawable/star_img1.jpg
new file mode 100644
index 0000000..e0692fb
Binary files /dev/null and b/代码/在这里2.1/res/drawable/star_img1.jpg differ
diff --git a/代码/在这里2.1/res/drawable/star_img2.jpg b/代码/在这里2.1/res/drawable/star_img2.jpg
new file mode 100644
index 0000000..391c24d
Binary files /dev/null and b/代码/在这里2.1/res/drawable/star_img2.jpg differ
diff --git a/代码/在这里2.1/res/drawable/star_img3.jpg b/代码/在这里2.1/res/drawable/star_img3.jpg
new file mode 100644
index 0000000..db58906
Binary files /dev/null and b/代码/在这里2.1/res/drawable/star_img3.jpg differ
diff --git a/代码/在这里2.1/res/drawable/star_img4.jpg b/代码/在这里2.1/res/drawable/star_img4.jpg
new file mode 100644
index 0000000..eb52ecd
Binary files /dev/null and b/代码/在这里2.1/res/drawable/star_img4.jpg differ
diff --git a/代码/在这里2.1/res/drawable/star_img5.jpg b/代码/在这里2.1/res/drawable/star_img5.jpg
new file mode 100644
index 0000000..8b48b57
Binary files /dev/null and b/代码/在这里2.1/res/drawable/star_img5.jpg differ
diff --git a/代码/在这里2.1/res/drawable/tab_bg_selector.xml b/代码/在这里2.1/res/drawable/tab_bg_selector.xml
new file mode 100644
index 0000000..8efcdbf
--- /dev/null
+++ b/代码/在这里2.1/res/drawable/tab_bg_selector.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/drawable/welcome_background.jpg b/代码/在这里2.1/res/drawable/welcome_background.jpg
new file mode 100644
index 0000000..e9755b2
Binary files /dev/null and b/代码/在这里2.1/res/drawable/welcome_background.jpg differ
diff --git a/代码/在这里2.1/res/layout/activity_about.xml b/代码/在这里2.1/res/layout/activity_about.xml
new file mode 100644
index 0000000..43e2ee5
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_about.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_award.xml b/代码/在这里2.1/res/layout/activity_award.xml
new file mode 100644
index 0000000..2ce11e4
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_award.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_base.xml b/代码/在这里2.1/res/layout/activity_base.xml
new file mode 100644
index 0000000..3fe3662
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_base.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_bxt.xml b/代码/在这里2.1/res/layout/activity_bxt.xml
new file mode 100644
index 0000000..dc32da0
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_bxt.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_bxt_news.xml b/代码/在这里2.1/res/layout/activity_bxt_news.xml
new file mode 100644
index 0000000..56290df
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_bxt_news.xml
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_car.xml b/代码/在这里2.1/res/layout/activity_car.xml
new file mode 100644
index 0000000..9ec7023
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_car.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/activity_classroom.xml b/代码/在这里2.1/res/layout/activity_classroom.xml
new file mode 100644
index 0000000..c6c244d
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_classroom.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_comment.xml b/代码/在这里2.1/res/layout/activity_comment.xml
new file mode 100644
index 0000000..161dd4c
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_comment.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_edit.xml b/代码/在这里2.1/res/layout/activity_edit.xml
new file mode 100644
index 0000000..6560c4b
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_edit.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_feedback.xml b/代码/在这里2.1/res/layout/activity_feedback.xml
new file mode 100644
index 0000000..cb08bab
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_feedback.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/activity_home.xml b/代码/在这里2.1/res/layout/activity_home.xml
new file mode 100644
index 0000000..87b9ba7
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_home.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_login.xml b/代码/在这里2.1/res/layout/activity_login.xml
new file mode 100644
index 0000000..89eac74
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_login.xml
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_mine.xml b/代码/在这里2.1/res/layout/activity_mine.xml
new file mode 100644
index 0000000..a1ac1d6
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_mine.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_mine_info.xml b/代码/在这里2.1/res/layout/activity_mine_info.xml
new file mode 100644
index 0000000..7a44f76
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_mine_info.xml
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_mine_info_edit.xml b/代码/在这里2.1/res/layout/activity_mine_info_edit.xml
new file mode 100644
index 0000000..e7fa0b8
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_mine_info_edit.xml
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_mine_old.xml b/代码/在这里2.1/res/layout/activity_mine_old.xml
new file mode 100644
index 0000000..a4d3ca6
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_mine_old.xml
@@ -0,0 +1,335 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_news.xml b/代码/在这里2.1/res/layout/activity_news.xml
new file mode 100644
index 0000000..ae1fd9c
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_news.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_order.xml b/代码/在这里2.1/res/layout/activity_order.xml
new file mode 100644
index 0000000..458b689
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_order.xml
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_order_info.xml b/代码/在这里2.1/res/layout/activity_order_info.xml
new file mode 100644
index 0000000..2617a2e
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_order_info.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/activity_reg.xml b/代码/在这里2.1/res/layout/activity_reg.xml
new file mode 100644
index 0000000..3654ab2
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_reg.xml
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/activity_shop.xml b/代码/在这里2.1/res/layout/activity_shop.xml
new file mode 100644
index 0000000..05efaf5
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_shop.xml
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_shop_all.xml b/代码/在这里2.1/res/layout/activity_shop_all.xml
new file mode 100644
index 0000000..363ab03
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_shop_all.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_shop_item.xml b/代码/在这里2.1/res/layout/activity_shop_item.xml
new file mode 100644
index 0000000..aca5ee3
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_shop_item.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_soft.xml b/代码/在这里2.1/res/layout/activity_soft.xml
new file mode 100644
index 0000000..292f1f1
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_soft.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_splash.xml b/代码/在这里2.1/res/layout/activity_splash.xml
new file mode 100644
index 0000000..b675293
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_splash.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/activity_test.xml b/代码/在这里2.1/res/layout/activity_test.xml
new file mode 100644
index 0000000..d7e28cf
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_test.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/activity_userinfo.xml b/代码/在这里2.1/res/layout/activity_userinfo.xml
new file mode 100644
index 0000000..0ae99aa
--- /dev/null
+++ b/代码/在这里2.1/res/layout/activity_userinfo.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/ai_item.xml b/代码/在这里2.1/res/layout/ai_item.xml
new file mode 100644
index 0000000..0b2d503
--- /dev/null
+++ b/代码/在这里2.1/res/layout/ai_item.xml
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/bxt_list_item.xml b/代码/在这里2.1/res/layout/bxt_list_item.xml
new file mode 100644
index 0000000..d361af5
--- /dev/null
+++ b/代码/在这里2.1/res/layout/bxt_list_item.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/comment_item.xml b/代码/在这里2.1/res/layout/comment_item.xml
new file mode 100644
index 0000000..800f398
--- /dev/null
+++ b/代码/在这里2.1/res/layout/comment_item.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/commit.xml b/代码/在这里2.1/res/layout/commit.xml
new file mode 100644
index 0000000..5367094
--- /dev/null
+++ b/代码/在这里2.1/res/layout/commit.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/common_datetime.xml b/代码/在这里2.1/res/layout/common_datetime.xml
new file mode 100644
index 0000000..07c3415
--- /dev/null
+++ b/代码/在这里2.1/res/layout/common_datetime.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/dlg_order_settime.xml b/代码/在这里2.1/res/layout/dlg_order_settime.xml
new file mode 100644
index 0000000..974cfd6
--- /dev/null
+++ b/代码/在这里2.1/res/layout/dlg_order_settime.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/goods_list_item.xml b/代码/在这里2.1/res/layout/goods_list_item.xml
new file mode 100644
index 0000000..5a0fb97
--- /dev/null
+++ b/代码/在这里2.1/res/layout/goods_list_item.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/gv_item_classroom.xml b/代码/在这里2.1/res/layout/gv_item_classroom.xml
new file mode 100644
index 0000000..4c8cc0e
--- /dev/null
+++ b/代码/在这里2.1/res/layout/gv_item_classroom.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_award.xml b/代码/在这里2.1/res/layout/header_award.xml
new file mode 100644
index 0000000..6a0ca0a
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_award.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_bxt.xml b/代码/在这里2.1/res/layout/header_bxt.xml
new file mode 100644
index 0000000..e679c11
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_bxt.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_bxt_news.xml b/代码/在这里2.1/res/layout/header_bxt_news.xml
new file mode 100644
index 0000000..72032ab
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_bxt_news.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_feedback.xml b/代码/在这里2.1/res/layout/header_feedback.xml
new file mode 100644
index 0000000..3b9ac1d
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_feedback.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_home.xml b/代码/在这里2.1/res/layout/header_home.xml
new file mode 100644
index 0000000..10e970c
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_home.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_mine.xml b/代码/在这里2.1/res/layout/header_mine.xml
new file mode 100644
index 0000000..59c69d9
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_mine.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_mine_info.xml b/代码/在这里2.1/res/layout/header_mine_info.xml
new file mode 100644
index 0000000..818280d
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_mine_info.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_mine_info_edit.xml b/代码/在这里2.1/res/layout/header_mine_info_edit.xml
new file mode 100644
index 0000000..a48689f
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_mine_info_edit.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_news.xml b/代码/在这里2.1/res/layout/header_news.xml
new file mode 100644
index 0000000..9372403
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_news.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_order.xml b/代码/在这里2.1/res/layout/header_order.xml
new file mode 100644
index 0000000..3a1becb
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_order.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_order_info.xml b/代码/在这里2.1/res/layout/header_order_info.xml
new file mode 100644
index 0000000..664a304
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_order_info.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_shop.xml b/代码/在这里2.1/res/layout/header_shop.xml
new file mode 100644
index 0000000..ae9dba3
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_shop.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/header_shop_all.xml b/代码/在这里2.1/res/layout/header_shop_all.xml
new file mode 100644
index 0000000..a893d03
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_shop_all.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/header_soft.xml b/代码/在这里2.1/res/layout/header_soft.xml
new file mode 100644
index 0000000..a7530c7
--- /dev/null
+++ b/代码/在这里2.1/res/layout/header_soft.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/layout_reservation.xml b/代码/在这里2.1/res/layout/layout_reservation.xml
new file mode 100644
index 0000000..30ebbd0
--- /dev/null
+++ b/代码/在这里2.1/res/layout/layout_reservation.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/mine_list_item.xml b/代码/在这里2.1/res/layout/mine_list_item.xml
new file mode 100644
index 0000000..b98c2d4
--- /dev/null
+++ b/代码/在这里2.1/res/layout/mine_list_item.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/mine_soft_list_item.xml b/代码/在这里2.1/res/layout/mine_soft_list_item.xml
new file mode 100644
index 0000000..b403c2a
--- /dev/null
+++ b/代码/在这里2.1/res/layout/mine_soft_list_item.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/news_list_item.xml b/代码/在这里2.1/res/layout/news_list_item.xml
new file mode 100644
index 0000000..169372f
--- /dev/null
+++ b/代码/在这里2.1/res/layout/news_list_item.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/order_info_list_item.xml b/代码/在这里2.1/res/layout/order_info_list_item.xml
new file mode 100644
index 0000000..e46624a
--- /dev/null
+++ b/代码/在这里2.1/res/layout/order_info_list_item.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/popmenu.xml b/代码/在这里2.1/res/layout/popmenu.xml
new file mode 100644
index 0000000..435138e
--- /dev/null
+++ b/代码/在这里2.1/res/layout/popmenu.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/scom_list_item.xml b/代码/在这里2.1/res/layout/scom_list_item.xml
new file mode 100644
index 0000000..5367094
--- /dev/null
+++ b/代码/在这里2.1/res/layout/scom_list_item.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/shop_all_list_item.xml b/代码/在这里2.1/res/layout/shop_all_list_item.xml
new file mode 100644
index 0000000..aa1c0c1
--- /dev/null
+++ b/代码/在这里2.1/res/layout/shop_all_list_item.xml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/shop_grid_item.xml b/代码/在这里2.1/res/layout/shop_grid_item.xml
new file mode 100644
index 0000000..97252d3
--- /dev/null
+++ b/代码/在这里2.1/res/layout/shop_grid_item.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/tab_widget_item.xml b/代码/在这里2.1/res/layout/tab_widget_item.xml
new file mode 100644
index 0000000..6c54957
--- /dev/null
+++ b/代码/在这里2.1/res/layout/tab_widget_item.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/layout/viewpager_menu.xml b/代码/在这里2.1/res/layout/viewpager_menu.xml
new file mode 100644
index 0000000..c9e0fe8
--- /dev/null
+++ b/代码/在这里2.1/res/layout/viewpager_menu.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/layout/viewpager_shopinfo.xml b/代码/在这里2.1/res/layout/viewpager_shopinfo.xml
new file mode 100644
index 0000000..5696e20
--- /dev/null
+++ b/代码/在这里2.1/res/layout/viewpager_shopinfo.xml
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/menu/main.xml b/代码/在这里2.1/res/menu/main.xml
new file mode 100644
index 0000000..c002028
--- /dev/null
+++ b/代码/在这里2.1/res/menu/main.xml
@@ -0,0 +1,9 @@
+
diff --git a/代码/在这里2.1/res/menu/popup.xml b/代码/在这里2.1/res/menu/popup.xml
new file mode 100644
index 0000000..c75aecd
--- /dev/null
+++ b/代码/在这里2.1/res/menu/popup.xml
@@ -0,0 +1,9 @@
+
+
diff --git a/代码/在这里2.1/res/values-sw600dp/dimens.xml b/代码/在这里2.1/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000..44f01db
--- /dev/null
+++ b/代码/在这里2.1/res/values-sw600dp/dimens.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/代码/在这里2.1/res/values-sw720dp-land/dimens.xml b/代码/在这里2.1/res/values-sw720dp-land/dimens.xml
new file mode 100644
index 0000000..61e3fa8
--- /dev/null
+++ b/代码/在这里2.1/res/values-sw720dp-land/dimens.xml
@@ -0,0 +1,9 @@
+
+
+
+ 128dp
+
+
diff --git a/代码/在这里2.1/res/values-v11/styles.xml b/代码/在这里2.1/res/values-v11/styles.xml
new file mode 100644
index 0000000..3c02242
--- /dev/null
+++ b/代码/在这里2.1/res/values-v11/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/values-v14/styles.xml b/代码/在这里2.1/res/values-v14/styles.xml
new file mode 100644
index 0000000..a91fd03
--- /dev/null
+++ b/代码/在这里2.1/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/代码/在这里2.1/res/values/colors.xml b/代码/在这里2.1/res/values/colors.xml
new file mode 100644
index 0000000..197be2f
--- /dev/null
+++ b/代码/在这里2.1/res/values/colors.xml
@@ -0,0 +1,14 @@
+
+
+
+ #00000000
+ #D95555
+ #D95555
+ #FFFFFF
+ #D95555
+ #D95555
+ #ffdddddd
+ #D95555
+ #888888
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/res/values/dimens.xml b/代码/在这里2.1/res/values/dimens.xml
new file mode 100644
index 0000000..55c1e59
--- /dev/null
+++ b/代码/在这里2.1/res/values/dimens.xml
@@ -0,0 +1,7 @@
+
+
+
+ 16dp
+ 16dp
+
+
diff --git a/代码/在这里2.1/res/values/strings.xml b/代码/在这里2.1/res/values/strings.xml
new file mode 100644
index 0000000..ebd7dfb
--- /dev/null
+++ b/代码/在这里2.1/res/values/strings.xml
@@ -0,0 +1,9 @@
+
+
+
+ 在这里
+ Settings
+ Hello world!
+
+
+
diff --git a/代码/在这里2.1/res/values/styles.xml b/代码/在这里2.1/res/values/styles.xml
new file mode 100644
index 0000000..303df28
--- /dev/null
+++ b/代码/在这里2.1/res/values/styles.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/代码/在这里2.1/src/com/stone/date/MessageDef.java b/代码/在这里2.1/src/com/stone/date/MessageDef.java
new file mode 100644
index 0000000..1128511
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/date/MessageDef.java
@@ -0,0 +1,11 @@
+package com.stone.date;
+
+
+public class MessageDef {
+
+ //查询用户订单成功完成
+ public static final int MINE_FINISH_LOAD_DATA = 401;
+
+ //查询用户成功完成
+ public static final int MINE_INFO_FINISH_FIND_USER = 402;
+}
diff --git a/代码/在这里2.1/src/com/stone/date/TypeDef.java b/代码/在这里2.1/src/com/stone/date/TypeDef.java
new file mode 100644
index 0000000..8770ae5
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/date/TypeDef.java
@@ -0,0 +1,29 @@
+package com.stone.date;
+
+/**
+ * 类型分类汇总
+ *
+ * @date 2014-4-29
+ * @author Stone
+ */
+public class TypeDef {
+
+ //父分类
+ public static final String[] typeDadList = { "学习", "点餐", "校园服务", "娱乐" };
+
+ //子分类--学习小菜
+ public static final String[] typeSonList1 = { "教室", "图书馆" };
+
+ //子分类--吃饭小菜
+ public static final String[] typeSonList2 = { "一食堂", "二食堂" };
+
+ //子分类--购物小菜
+ public static final String[] typeSonList3 = {"博学堂", "打印", "理发", "宾馆", "自行车", "生日蛋糕", "宿舍超市"};
+
+ //子分类--疯狂小菜
+ public static final String[] typeSonList4 = { "兼职", "景点门票", "租车", "旅游",
+ "聚餐", "宾馆", "KTV" };
+
+ public static final String[] chDayOfWeek = {"天","一","二","三","四","五","六"};
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/AIContentAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/AIContentAdapter.java
new file mode 100644
index 0000000..856ae0f
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/AIContentAdapter.java
@@ -0,0 +1,169 @@
+package com.stone.shop.adapter;
+
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.model.Constant;
+import com.stone.shop.model.Discuss;
+import com.stone.shop.model.User;
+import com.stone.shop.view.CommentActivity;
+import com.stone.util.ActivityUtil;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.datatype.BmobPointer;
+import cn.bmob.v3.datatype.BmobRelation;
+import cn.bmob.v3.listener.FindListener;
+import cn.bmob.v3.listener.UpdateListener;
+
+public class AIContentAdapter extends BaseContentAdapter {
+
+ public static final String TAG = "AIContentAdapter";
+ public static final int SAVE_FAVOURITE = 2;
+
+ public AIContentAdapter(Context context, List list) {
+ super(context, list);
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ public View getConvertView(int position, View convertView, ViewGroup parent) {
+ // TODO Auto-generated method stub
+ final ViewHolder viewHolder;
+ if (convertView == null) {
+ viewHolder = new ViewHolder();
+ convertView = mInflater.inflate(R.layout.ai_item, null);
+ viewHolder.userName = (TextView) convertView.findViewById(R.id.user_name);
+ viewHolder.userLogo = (ImageView) convertView.findViewById(R.id.user_logo);
+ viewHolder.contentText = (TextView) convertView.findViewById(R.id.content_text);
+ viewHolder.contentImage = (ImageView) convertView.findViewById(R.id.content_image);
+ viewHolder.love = (TextView) convertView.findViewById(R.id.item_action_love);
+ viewHolder.hate = (TextView) convertView.findViewById(R.id.item_action_hate);
+ viewHolder.share = (TextView) convertView.findViewById(R.id.item_action_share);
+ viewHolder.comment = (TextView) convertView.findViewById(R.id.item_action_comment);
+ viewHolder.title_text = (TextView) convertView.findViewById(R.id.title_text);
+ viewHolder.time_text = (TextView) convertView.findViewById(R.id.time_text);
+ convertView.setTag(viewHolder);
+ } else {
+ viewHolder = (ViewHolder) convertView.getTag();
+ }
+ final Discuss entity = dataList.get(position);
+ viewHolder.userName.setText(entity.getAuthor().getUsername());
+ viewHolder.contentText.setText(entity.getContent());
+ if (null == entity.getContentfigureurl()) {
+ viewHolder.contentImage.setVisibility(View.GONE);
+ } else {
+ viewHolder.contentImage.setVisibility(View.VISIBLE);
+ }
+ viewHolder.love.setText(entity.getLove() + "");
+ if (entity.getMyLove()) {
+ viewHolder.love.setTextColor(Color.parseColor("#D95555"));
+ } else {
+ viewHolder.love.setTextColor(Color.parseColor("#000000"));
+ }
+ viewHolder.title_text.setText(entity.getTitle());
+ viewHolder.time_text.setText(entity.getCreatedAt());
+ viewHolder.hate.setText(entity.getHate() + "");
+ viewHolder.love.setOnClickListener(new OnClickListener() {
+ boolean oldFav = entity.getMyFav();
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ if (entity.getMyLove()) {
+ ActivityUtil.show(mContext, "您已赞过啦");
+
+ return;
+ }
+
+ entity.setLove(entity.getLove() + 1);
+ viewHolder.love.setTextColor(Color.parseColor("#D95555"));
+ viewHolder.love.setText(entity.getLove() + "");
+
+ entity.increment("love", 1);
+ if (entity.getMyFav()) {
+ entity.setMyFav(false);
+ }
+ entity.setMyLove(true);
+ entity.update(mContext, new UpdateListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ entity.setMyLove(true);
+ entity.setMyFav(oldFav);
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ entity.setMyLove(false);
+ entity.setMyFav(oldFav);
+ }
+ });
+ }
+ });
+ viewHolder.hate.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ entity.setHate(entity.getHate() + 1);
+ viewHolder.hate.setText(entity.getHate() + "");
+ entity.increment("hate", 1);
+ entity.update(mContext, new UpdateListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ ActivityUtil.show(mContext, "点踩成功~");
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+ }
+ });
+ viewHolder.comment.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ // 评论
+ Intent intent = new Intent();
+ intent.setClass(mContext, CommentActivity.class);
+ intent.putExtra("data", entity);
+ mContext.startActivity(intent);
+ }
+ });
+
+ return convertView;
+ }
+
+ public static class ViewHolder {
+ public ImageView userLogo;
+ public TextView userName;
+ public TextView contentText;
+ public ImageView contentImage;
+ private TextView title_text;
+ private TextView time_text;
+ public TextView love;
+ public TextView hate;
+ public TextView share;
+ public TextView comment;
+ }
+
+}
\ No newline at end of file
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/BXTListAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/BXTListAdapter.java
new file mode 100644
index 0000000..df02860
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/BXTListAdapter.java
@@ -0,0 +1,75 @@
+package com.stone.shop.adapter;
+
+import java.util.Iterator;
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.model.BXTNews;
+import com.stone.shop.model.Good;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.TextView;
+
+/**
+ * 教学类-博学堂-讲座列表适配器
+ *
+ * @date 2014-5-10
+ * @author Stone
+ */
+public class BXTListAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private List mNewsList; // 商品列表信息
+ private LayoutInflater mInflater = null;
+
+ public BXTListAdapter(Context context, List newsList) {
+ mContext = context;
+ mNewsList = newsList;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mNewsList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mNewsList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ // 刷新列表中的数据
+ public void refresh(List list) {
+ Log.i("BXTNewsAdapter", "Adapter刷新数据");
+ mNewsList = list;
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ BXTNewsHolder newsHolder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.bxt_list_item, null);
+ newsHolder = new BXTNewsHolder();
+ newsHolder.tvBXTNewsTitle = (TextView) convertView
+ .findViewById(R.id.tv_bxt_news_item_title);
+ convertView.setTag(newsHolder);
+ } else {
+ newsHolder = (BXTNewsHolder) convertView.getTag();
+ }
+ newsHolder.tvBXTNewsTitle.setText(mNewsList.get(position).getTitle());
+ return convertView;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/BXTNewsHolder.java b/代码/在这里2.1/src/com/stone/shop/adapter/BXTNewsHolder.java
new file mode 100644
index 0000000..976395b
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/BXTNewsHolder.java
@@ -0,0 +1,9 @@
+package com.stone.shop.adapter;
+
+import android.widget.TextView;
+
+public class BXTNewsHolder {
+
+ public TextView tvBXTNewsTitle; //博学堂讲座标题
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/BaseContentAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/BaseContentAdapter.java
new file mode 100644
index 0000000..129f03f
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/BaseContentAdapter.java
@@ -0,0 +1,61 @@
+package com.stone.shop.adapter;
+
+import java.util.List;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+
+
+public abstract class BaseContentAdapter extends BaseAdapter{
+
+ protected Context mContext;
+ protected List dataList ;
+ protected LayoutInflater mInflater;
+
+
+
+ public List getDataList() {
+ return dataList;
+ }
+
+ public void setDataList(List dataList) {
+ this.dataList = dataList;
+ }
+
+ public BaseContentAdapter(Context context,List list){
+ mContext = context;
+ dataList = list;
+ mInflater = LayoutInflater.from(mContext);
+ }
+
+ @Override
+ public int getCount() {
+ // TODO Auto-generated method stub
+ return dataList.size();
+ }
+
+ @Override
+ public T getItem(int position) {
+ // TODO Auto-generated method stub
+ return dataList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ // TODO Auto-generated method stub
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ // TODO Auto-generated method stub
+
+ return getConvertView(position,convertView,parent);
+ }
+
+ public abstract View getConvertView(int position, View convertView, ViewGroup parent);
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/ClassroomAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/ClassroomAdapter.java
new file mode 100644
index 0000000..7deb441
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/ClassroomAdapter.java
@@ -0,0 +1,69 @@
+package com.stone.shop.adapter;
+
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.model.Classroom;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+public class ClassroomAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private List mNewsList; // 商品列表信息
+ private LayoutInflater mInflater = null;
+
+ public ClassroomAdapter(Context context, List newsList) {
+ mContext = context;
+ mNewsList = newsList;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mNewsList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mNewsList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ // 刷新列表中的数据
+ public void refresh(List list) {
+ mNewsList = list;
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder viewHolder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.gv_item_classroom, null);
+ viewHolder = new ViewHolder();
+ viewHolder.tv_chooseText = (TextView) convertView.findViewById(R.id.tv_chooseText);
+ convertView.setTag(viewHolder);
+ } else {
+ viewHolder = (ViewHolder) convertView.getTag();
+ }
+ viewHolder.tv_chooseText.setText(mNewsList.get(position).getName());
+ return convertView;
+ }
+
+ class ViewHolder {
+
+ public TextView tv_chooseText; // 博学堂讲座标题
+
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/CommentAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/CommentAdapter.java
new file mode 100644
index 0000000..99f8633
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/CommentAdapter.java
@@ -0,0 +1,55 @@
+package com.stone.shop.adapter;
+
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.model.Comment;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+
+public class CommentAdapter extends BaseContentAdapter{
+
+ public CommentAdapter(Context context, List list) {
+ super(context, list);
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ public View getConvertView(int position, View convertView, ViewGroup parent) {
+ // TODO Auto-generated method stub
+ ViewHolder viewHolder;
+ if(convertView == null){
+ viewHolder = new ViewHolder();
+ convertView = mInflater.inflate(R.layout.comment_item, null);
+ viewHolder.userName = (TextView)convertView.findViewById(R.id.userName_comment);
+ viewHolder.commentContent = (TextView)convertView.findViewById(R.id.content_comment);
+ viewHolder.index = (TextView)convertView.findViewById(R.id.index_comment);
+ viewHolder.time_comment = (TextView) convertView.findViewById(R.id.time_comment);
+ convertView.setTag(viewHolder);
+ }else{
+ viewHolder = (ViewHolder)convertView.getTag();
+ }
+
+ final Comment comment = dataList.get(position);
+ if(comment.getUser()!=null){
+ viewHolder.userName.setText(comment.getUser().getUsername());
+ }else{
+ viewHolder.userName.setText("墙友");
+ }
+ viewHolder.index.setText((position+1)+"楼");
+ viewHolder.commentContent.setText(comment.getCommentContent());
+ viewHolder.time_comment.setText(comment.getCreatedAt());
+ return convertView;
+ }
+
+ public static class ViewHolder{
+ public TextView userName;
+ public TextView commentContent;
+ public TextView index;
+ private TextView time_comment;
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/GoodsHolder.java b/代码/在这里2.1/src/com/stone/shop/adapter/GoodsHolder.java
new file mode 100644
index 0000000..0a4e852
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/GoodsHolder.java
@@ -0,0 +1,17 @@
+package com.stone.shop.adapter;
+
+import android.widget.Button;
+import android.widget.TextView;
+
+/**
+ * 商品视图
+ * @date 2014-4-26
+ * @author Stone
+ */
+public class GoodsHolder {
+
+ public TextView tvName; //商品名称
+ public TextView tvPrice; //商品单价
+ public TextView btnBuyGood; //购买按钮
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/GoodsListAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/GoodsListAdapter.java
new file mode 100644
index 0000000..0befe9a
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/GoodsListAdapter.java
@@ -0,0 +1,70 @@
+package com.stone.shop.adapter;
+
+import java.util.List;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.stone.shop.R;
+import com.stone.shop.model.Good;
+
+public class GoodsListAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private List mGoodsList; // 商品列表信息
+ private LayoutInflater mInflater = null;
+
+ public GoodsListAdapter(Context context, List goodsList) {
+ mContext = context;
+ mGoodsList = goodsList;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mGoodsList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mGoodsList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ // 刷新列表中的数据
+ public void refresh(List list) {
+ mGoodsList = list;
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ GoodsHolder goodHolder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.goods_list_item, null);
+ goodHolder = new GoodsHolder();
+ goodHolder.tvName = (TextView) convertView
+ .findViewById(R.id.tv_good_name);
+ goodHolder.tvPrice = (TextView) convertView
+ .findViewById(R.id.tv_good_price);
+ goodHolder.btnBuyGood = (TextView) convertView
+ .findViewById(R.id.btn_buy_good);
+ convertView.setTag(goodHolder);
+ } else {
+ goodHolder = (GoodsHolder) convertView.getTag();
+ }
+ goodHolder.tvName.setText(mGoodsList.get(position).getName());
+ goodHolder.tvPrice.setText("¥"+mGoodsList.get(position).getPrice());
+ return convertView;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/GridAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/GridAdapter.java
new file mode 100644
index 0000000..9cc78c8
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/GridAdapter.java
@@ -0,0 +1,114 @@
+package com.stone.shop.adapter;
+
+import android.R.integer;
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.stone.date.TypeDef;
+import com.stone.shop.R;
+
+/**
+ * 生活-- 网格布局(ImageView+TextView)适配器
+ *
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class GridAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private int mIndex = 0; // 代表当前需要适配页面中第几个GridView
+
+ //学习小菜
+ public static String[] mSchoolTexts = TypeDef.typeSonList1;
+ private int[] mSchoolImages = { R.drawable.ic_8, R.drawable.ic_8 };
+
+ //吃饭小菜
+ public static String[] mFoodTexts = TypeDef.typeSonList2;
+ private int[] mFoodImages = { R.drawable.ic_41, R.drawable.ic_42};
+
+ //购物小菜
+ public static String[] mGiftTexts = TypeDef.typeSonList3;
+ private int[] mGiftImages = { R.drawable.ic_7, R.drawable.ic_7,
+ R.drawable.ic_7, R.drawable.ic_7, R.drawable.ic_7,
+ R.drawable.ic_7, R.drawable.ic_7};
+
+ //疯狂小菜
+ public static String[] mOutTexts = TypeDef.typeSonList4;
+ private int[] mOutImages = { R.drawable.ic_3, R.drawable.ic_3,
+ R.drawable.ic_3, R.drawable.ic_3, R.drawable.ic_3,
+ R.drawable.ic_3, R.drawable.ic_3 };
+
+ public GridAdapter(Context context, int index) {
+ mContext = context;
+ mIndex = index;
+ }
+
+ @Override
+ public int getCount() {
+ int count = 0;
+ switch (mIndex) {
+ case 0:
+ count = mFoodImages.length;
+ break;
+ case 1:
+ count = mGiftImages.length;
+ break;
+ case 2:
+ count = mOutImages.length;
+ break;
+ case 3:
+ count = mSchoolImages.length;
+ break;
+ default:
+ break;
+ }
+ return count;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return null;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return 0;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View view = View.inflate(mContext, R.layout.shop_grid_item, null);
+ // RelativeLayout rl = (RelativeLayout)
+ // view.findViewById(R.id.relaGrid);
+
+ ImageView image = (ImageView) view.findViewById(R.id.img_chooseImage);
+ TextView text = (TextView) view.findViewById(R.id.tv_chooseText);
+ switch (mIndex) {
+ case 0:
+ image.setImageResource(mFoodImages[position]);
+ text.setText(mFoodTexts[position]);
+ break;
+ case 1:
+ image.setImageResource(mGiftImages[position]);
+ text.setText(mGiftTexts[position]);
+ break;
+ case 2:
+ image.setImageResource(mOutImages[position]);
+ text.setText(mOutTexts[position]);
+ break;
+ case 3:
+ image.setImageResource(mSchoolImages[position]);
+ text.setText(mSchoolTexts[position]);
+ break;
+ default:
+ break;
+ }
+
+ return view;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/ImagePagerAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/ImagePagerAdapter.java
new file mode 100644
index 0000000..c73ef5a
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/ImagePagerAdapter.java
@@ -0,0 +1,67 @@
+package com.stone.shop.adapter;
+
+import java.util.List;
+
+import android.content.Context;
+import android.os.Parcelable;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+
+/**
+ * 首页--图片轮播AutoScrollViewPager适配器
+ * @author Stone
+ */
+public class ImagePagerAdapter extends PagerAdapter {
+
+ private List mImgViews;
+
+ public ImagePagerAdapter(Context context, List imgViews) {
+ this.mImgViews = imgViews;
+ }
+
+ @Override
+ public int getCount() {
+ if(mImgViews != null){
+ return mImgViews.size();
+ }
+ return 0;
+ }
+
+ @Override
+ public Object instantiateItem(View arg0, int arg1) {
+ ((ViewPager) arg0).addView(mImgViews.get(arg1));
+ return mImgViews.get(arg1);
+ }
+
+ @Override
+ public void destroyItem(View arg0, int arg1, Object arg2) {
+ ((ViewPager) arg0).removeView(mImgViews.get(arg1));
+ }
+
+ @Override
+ public boolean isViewFromObject(View arg0, Object arg1) {
+ return arg0 == arg1;
+ }
+
+ @Override
+ public void restoreState(Parcelable arg0, ClassLoader arg1) {
+
+ }
+
+ @Override
+ public Parcelable saveState() {
+ return null;
+ }
+
+ @Override
+ public void startUpdate(View arg0) {
+
+ }
+
+ @Override
+ public void finishUpdate(View arg0) {
+
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/MineListAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/MineListAdapter.java
new file mode 100644
index 0000000..29a2f69
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/MineListAdapter.java
@@ -0,0 +1,69 @@
+package com.stone.shop.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.stone.shop.R;
+
+/**
+ * MineActivity 项目列表适配器
+ * @date 2014-5-10
+ * @author Stone
+ */
+public class MineListAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private String[] mItemNames; // 项目列表名称
+ private String[] mItemContents; //项目列表的备注值
+ private int[] mItemImgIds; // 项目列表Icon
+ private LayoutInflater mInflater = null;
+
+ public MineListAdapter(Context context, String[] names, String[] contents, int[] imgIds) {
+ mContext = context;
+ mItemNames = names;
+ mItemContents = contents;
+ mItemImgIds = imgIds;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mItemNames.length;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mItemNames[position];
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ MineListHolder holder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.mine_list_item, null);
+ holder = new MineListHolder();
+ holder.imgItem = (ImageView) convertView.findViewById(R.id.img_item);
+ holder.tvItemName = (TextView) convertView
+ .findViewById(R.id.tv_item_name);
+ holder.tvItemContent = (TextView) convertView.findViewById(R.id.tv_item_content);
+ convertView.setTag(holder);
+ } else {
+ holder = (MineListHolder) convertView.getTag();
+ }
+ holder.imgItem.setBackgroundResource(mItemImgIds[position]);
+ holder.tvItemName.setText(mItemNames[position]);
+ holder.tvItemContent.setText(mItemContents[position]);
+ return convertView;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/MineListHolder.java b/代码/在这里2.1/src/com/stone/shop/adapter/MineListHolder.java
new file mode 100644
index 0000000..eb315fe
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/MineListHolder.java
@@ -0,0 +1,12 @@
+package com.stone.shop.adapter;
+
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class MineListHolder {
+
+ public ImageView imgItem; //项目Icon
+ public TextView tvItemName; //项目名称
+ public TextView tvItemContent; //项目值
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/MineSoftAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/MineSoftAdapter.java
new file mode 100644
index 0000000..9dae107
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/MineSoftAdapter.java
@@ -0,0 +1,65 @@
+package com.stone.shop.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.stone.shop.R;
+
+/**
+ * MineActivity 项目列表适配器
+ * @date 2014-5-10
+ * @author Stone
+ */
+public class MineSoftAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private String[] mItemNames; // 项目列表名称
+ private String[] mItemContents; //项目列表的备注值
+ private LayoutInflater mInflater = null;
+
+ public MineSoftAdapter(Context context, String[] names, String[] contents) {
+ mContext = context;
+ mItemNames = names;
+ mItemContents = contents;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mItemNames.length;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mItemNames[position];
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ MineListHolder holder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.mine_soft_list_item, null);
+ holder = new MineListHolder();
+ holder.tvItemName = (TextView) convertView
+ .findViewById(R.id.tv_item_name);
+ holder.tvItemContent = (TextView) convertView.findViewById(R.id.tv_item_content);
+ convertView.setTag(holder);
+ } else {
+ holder = (MineListHolder) convertView.getTag();
+ }
+ holder.tvItemName.setText(mItemNames[position]);
+ holder.tvItemContent.setText(mItemContents[position]);
+ return convertView;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/MineSoftHolder.java b/代码/在这里2.1/src/com/stone/shop/adapter/MineSoftHolder.java
new file mode 100644
index 0000000..d3ed1ac
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/MineSoftHolder.java
@@ -0,0 +1,10 @@
+package com.stone.shop.adapter;
+
+import android.widget.TextView;
+
+public class MineSoftHolder {
+
+ public TextView tvItemName; //项目名称
+ public TextView tvItemContent; //项目值
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/NewsHolder.java b/代码/在这里2.1/src/com/stone/shop/adapter/NewsHolder.java
new file mode 100644
index 0000000..b49850d
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/NewsHolder.java
@@ -0,0 +1,11 @@
+package com.stone.shop.adapter;
+
+import android.widget.TextView;
+
+public class NewsHolder {
+
+ public TextView tvNewsType; //新闻分类
+ public TextView tvNewsTitle; //新闻标题
+ public TextView tvNewsDate; //新闻时间
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/NewsListAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/NewsListAdapter.java
new file mode 100644
index 0000000..92264ca
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/NewsListAdapter.java
@@ -0,0 +1,82 @@
+package com.stone.shop.adapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.model.News;
+
+import android.R.integer;
+import android.content.Context;
+import android.graphics.pdf.PdfDocument.Page;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+/**
+ * 新闻列表适配器
+ *
+ * @date 2014-5-3
+ * @author Stone
+ */
+public class NewsListAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private LayoutInflater mInflater = null;
+ private List mNewsList = null; // 所选分类下的所有店铺列表
+
+ public NewsListAdapter(Context context, List newsList) {
+ mContext = context;
+ mNewsList = newsList;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mNewsList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mNewsList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ // 刷新列表中的数据
+ public void refresh(ArrayList list) {
+ mNewsList = list;
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ NewsHolder newsHolder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.news_list_item, null);
+ newsHolder = new NewsHolder();
+ newsHolder.tvNewsType = (TextView) convertView
+ .findViewById(R.id.tv_news_type);
+ newsHolder.tvNewsTitle = (TextView) convertView
+ .findViewById(R.id.tv_news_title);
+ newsHolder.tvNewsDate = (TextView) convertView
+ .findViewById(R.id.tv_news_date);
+ convertView.setTag(newsHolder);
+ } else {
+ newsHolder = (NewsHolder) convertView.getTag();
+ }
+ //拆分字符串,只取年月日
+ String[] ss = new String[2];
+ ss = mNewsList.get(position).getCreatedAt().split(" ");
+ newsHolder.tvNewsType.setText(mNewsList.get(position).getType()); //新闻类型
+ newsHolder.tvNewsTitle.setText(mNewsList.get(position).getTitle()); //新闻标题
+ newsHolder.tvNewsDate.setText(ss[0]); //新闻发布日期
+ return convertView;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/OrderInfoHolder.java b/代码/在这里2.1/src/com/stone/shop/adapter/OrderInfoHolder.java
new file mode 100644
index 0000000..7b94ec6
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/OrderInfoHolder.java
@@ -0,0 +1,12 @@
+package com.stone.shop.adapter;
+
+import android.widget.TextView;
+
+public class OrderInfoHolder {
+
+ public TextView tvOrderInfoGoodName;
+ public TextView tvOrderInfoShopName;
+ public TextView tvOrderInfoPrice;
+ public TextView tvOrderInfoState;
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/OrderInfoListAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/OrderInfoListAdapter.java
new file mode 100644
index 0000000..35c9294
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/OrderInfoListAdapter.java
@@ -0,0 +1,88 @@
+package com.stone.shop.adapter;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.listener.GetListener;
+
+import com.stone.date.TypeDef;
+import com.stone.shop.R;
+import com.stone.shop.model.Good;
+import com.stone.shop.model.Order;
+import com.stone.shop.model.Shop;
+import com.stone.shop.view.OrderInfoActivity;
+
+/**
+ * 适配器--适配订单列表中的数据
+ *
+ * @date 2014-5-27
+ * @author Stone
+ */
+public class OrderInfoListAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private LayoutInflater mInflater = null;
+ private List mOrderList = null; // 所选分类下的所有店铺列表
+ private String mType; // 商店的分类
+
+ public OrderInfoListAdapter(Context context, List orderList) {
+ mContext = context;
+ mOrderList = orderList;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mOrderList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mOrderList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ public void refresh(List list) {
+ mOrderList = list;
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ OrderInfoHolder orderInfoHolder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.order_info_list_item, null);
+ orderInfoHolder = new OrderInfoHolder();
+ orderInfoHolder.tvOrderInfoGoodName = (TextView) convertView
+ .findViewById(R.id.tv_order_info_good_name);
+ orderInfoHolder.tvOrderInfoShopName = (TextView) convertView
+ .findViewById(R.id.tv_order_info_shop_name);
+ orderInfoHolder.tvOrderInfoPrice = (TextView) convertView
+ .findViewById(R.id.tv_order_info_price);
+ orderInfoHolder.tvOrderInfoState = (TextView) convertView
+ .findViewById(R.id.tv_order_info_state);
+ convertView.setTag(orderInfoHolder);
+ } else {
+ orderInfoHolder = (OrderInfoHolder) convertView.getTag();
+ }
+ orderInfoHolder.tvOrderInfoGoodName.setText(mOrderList.get(position).getGoodName());
+ orderInfoHolder.tvOrderInfoShopName.setText(mOrderList.get(position).getShopName());
+ orderInfoHolder.tvOrderInfoPrice.setText("¥" + mOrderList.get(position).getPrice());
+ orderInfoHolder.tvOrderInfoState.setText(mOrderList.get(position).getState());
+ return convertView;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/SComHolder.java b/代码/在这里2.1/src/com/stone/shop/adapter/SComHolder.java
new file mode 100644
index 0000000..5bf60e8
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/SComHolder.java
@@ -0,0 +1,10 @@
+package com.stone.shop.adapter;
+
+import android.widget.TextView;
+
+public class SComHolder {
+
+ public TextView tvComUser;
+ public TextView tvComContent;
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/SCommentAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/SCommentAdapter.java
new file mode 100644
index 0000000..98cf470
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/SCommentAdapter.java
@@ -0,0 +1,66 @@
+package com.stone.shop.adapter;
+
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.model.SComment;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+/**
+ * 店铺评论列表适配器
+ * @date 2014-5-3
+ * @author Stone
+ */
+public class SCommentAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private LayoutInflater mInflater = null;
+ private List mSComList = null; // 所选分类下的所有店铺列表
+
+ public SCommentAdapter(Context context, List list) {
+ mContext = context;
+ mSComList = list;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mSComList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mSComList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ SComHolder scomHolder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.scom_list_item, null);
+ scomHolder = new SComHolder();
+ scomHolder.tvComUser = (TextView) convertView
+ .findViewById(R.id.tv_commit_user);
+ scomHolder.tvComContent = (TextView) convertView
+ .findViewById(R.id.tv_commit_content);
+ convertView.setTag(scomHolder);
+ } else {
+ scomHolder = (SComHolder) convertView.getTag();
+ }
+ scomHolder.tvComUser.setText(mSComList.get(position).getUserName());
+ scomHolder.tvComContent.setText(mSComList.get(position).getContent());
+ return convertView;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/ShopHolder.java b/代码/在这里2.1/src/com/stone/shop/adapter/ShopHolder.java
new file mode 100644
index 0000000..f0c3de3
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/ShopHolder.java
@@ -0,0 +1,16 @@
+package com.stone.shop.adapter;
+
+import android.widget.TextView;
+
+/**
+ * 商店视图
+ * @date 2014-4-29
+ * @author Stone
+ */
+public class ShopHolder {
+
+ public TextView tvShopName;
+ public TextView tvShopType;
+ public TextView tvShopLoc;
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/ShopListAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/ShopListAdapter.java
new file mode 100644
index 0000000..539a17f
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/ShopListAdapter.java
@@ -0,0 +1,126 @@
+package com.stone.shop.adapter;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.stone.date.TypeDef;
+import com.stone.shop.R;
+import com.stone.shop.model.Shop;
+
+/**
+ * 适配器--适配某一分类下的店铺列表数据
+ *
+ * @date 2014-4-29
+ * @author Stone
+ */
+public class ShopListAdapter extends BaseAdapter {
+
+ private Context mContext;
+ private LayoutInflater mInflater = null;
+ private ArrayList mShopList = null; // 所选分类下的所有店铺列表
+ private String mType; // 商店的分类
+
+ public ShopListAdapter(Context context, ArrayList shopList,
+ String type) {
+ mContext = context;
+ mShopList = shopList;
+ mType = type;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mShopList.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mShopList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ // 刷新列表中的数据
+ public void refresh(ArrayList list) {
+ mShopList = list;
+ //将数字的类型编号转换为文字
+ exchangeType(mType);
+ notifyDataSetChanged();
+ }
+
+ /**
+ * 根据当前的type类型, 转换成相应的文字
+ * @date 2014-4-29
+ * @param typeString
+ */
+ private void exchangeType(String typeString) {
+
+ int type = Integer.parseInt(typeString);
+ int fatherType = type / 10; //父类型编号
+ int sonType = type % 10; //子类型编号
+
+ Iterator iterator = mShopList.iterator();
+ while (iterator.hasNext()) {
+ switch (fatherType) {
+ case 1:
+ iterator.next().setType(
+ TypeDef.typeDadList[fatherType-1] + "/"
+ + TypeDef.typeSonList1[sonType-1]);
+ break;
+ case 2:
+ iterator.next().setType(
+ TypeDef.typeDadList[fatherType-1] + "/"
+ + TypeDef.typeSonList2[sonType-1]);
+ break;
+ case 3:
+ iterator.next().setType(
+ TypeDef.typeDadList[fatherType-1] + "/"
+ + TypeDef.typeSonList3[sonType-1]);
+ break;
+ case 4:
+ iterator.next().setType(
+ TypeDef.typeDadList[fatherType-1] + "/"
+ + TypeDef.typeSonList4[sonType-1]);
+ break;
+ default:
+ break;
+ }
+
+ }
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ShopHolder shopHodler;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.shop_all_list_item, null);
+ shopHodler = new ShopHolder();
+ shopHodler.tvShopName = (TextView) convertView
+ .findViewById(R.id.tv_shop_name);
+ shopHodler.tvShopType = (TextView) convertView
+ .findViewById(R.id.tv_shop_type);
+ shopHodler.tvShopLoc = (TextView) convertView
+ .findViewById(R.id.tv_shop_loc);
+ convertView.setTag(shopHodler);
+ } else {
+ shopHodler = (ShopHolder) convertView.getTag();
+ }
+ shopHodler.tvShopName.setText(mShopList.get(position).getName());
+ // 商店的类型需要单独处理
+ shopHodler.tvShopType.setText(mShopList.get(position).getType());
+ shopHodler.tvShopLoc.setText("二食堂");
+ return convertView;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/SmartFragmentStatePagerAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/SmartFragmentStatePagerAdapter.java
new file mode 100644
index 0000000..b89a8f7
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/SmartFragmentStatePagerAdapter.java
@@ -0,0 +1,41 @@
+package com.stone.shop.adapter;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+import android.util.SparseArray;
+import android.view.ViewGroup;
+
+/*
+Extension of FragmentStatePagerAdapter which intelligently caches
+all active fragments and manages the fragment lifecycles.
+Usage involves extending from SmartFragmentStatePagerAdapter as you would any other PagerAdapter.
+*/
+public abstract class SmartFragmentStatePagerAdapter extends FragmentStatePagerAdapter {
+ // Sparse array to keep track of registered fragments in memory
+ private SparseArray registeredFragments = new SparseArray();
+
+ public SmartFragmentStatePagerAdapter(FragmentManager fragmentManager) {
+ super(fragmentManager);
+ }
+
+ // Register the fragment when the item is instantiated
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ Fragment fragment = (Fragment) super.instantiateItem(container, position);
+ registeredFragments.put(position, fragment);
+ return fragment;
+ }
+
+ // Unregister when the item is inactive
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ registeredFragments.remove(position);
+ super.destroyItem(container, position, object);
+ }
+
+ // Returns the fragment for the position (if instantiated)
+ public Fragment getRegisteredFragment(int position) {
+ return registeredFragments.get(position);
+ }
+}
\ No newline at end of file
diff --git a/代码/在这里2.1/src/com/stone/shop/adapter/ViewPagerAdapter.java b/代码/在这里2.1/src/com/stone/shop/adapter/ViewPagerAdapter.java
new file mode 100644
index 0000000..38dedc2
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/adapter/ViewPagerAdapter.java
@@ -0,0 +1,59 @@
+package com.stone.shop.adapter;
+
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.view.ShopItemActivity;
+import com.stone.ui.ViewPagerCompat;
+
+import android.support.v4.view.PagerAdapter;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+import android.widget.Toast;
+
+/**
+ * 商铺详情页--ViewPagerCompat适配器
+ * @author Stone
+ */
+public class ViewPagerAdapter extends PagerAdapter {
+
+ private List mListViews;
+ private List mTitleList;
+
+ public ViewPagerAdapter(List mListViews, List mTitleList) {
+ this.mListViews = mListViews;
+ this.mTitleList = mTitleList;
+ }
+
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ container.removeView(mListViews.get(position));//删除页卡
+ }
+
+ @Override
+ public CharSequence getPageTitle(int position) {
+
+ return mTitleList.get(position);//直接用适配器来完成标题的显示,所以从上面可以看到,我们没有使用PagerTitleStrip。当然你可以使用。
+ }
+
+
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) { //这个方法用来实例化页卡
+ container.addView(mListViews.get(position), 0);//添加页卡
+ return mListViews.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mListViews.size();//返回页卡的数量
+ }
+
+ @Override
+ public boolean isViewFromObject(View arg0, Object arg1) {
+ return arg0==arg1;//官方提示这样写
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/BXTNews.java b/代码/在这里2.1/src/com/stone/shop/model/BXTNews.java
new file mode 100644
index 0000000..fb8f926
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/BXTNews.java
@@ -0,0 +1,78 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+/**
+ * 博学堂讲座实体类
+ * @date 2014-5-10
+ * @author Stone
+ */
+public class BXTNews extends BmobObject{
+
+ //private String id;
+
+ private String title; //标题
+ private String topic; //讲座主题
+ private String speaker; //主 讲 人
+ private String time; //讲座时间
+ private String location; //讲座地点
+ private String holder1; //主办单位
+ private String holder2; //承办单位
+ private String points; //主讲内容提要
+ private String speakerinfo; //主讲人简介
+
+ public String getTitle() {
+ return title;
+ }
+ public String getTopic() {
+ return topic;
+ }
+ public String getSpeaker() {
+ return speaker;
+ }
+ public String getTime() {
+ return time;
+ }
+ public String getLocation() {
+ return location;
+ }
+ public String getHolder1() {
+ return holder1;
+ }
+ public String getHolder2() {
+ return holder2;
+ }
+ public String getPoints() {
+ return points;
+ }
+ public String getSpeakerinfo() {
+ return speakerinfo;
+ }
+ public void setTitle(String title) {
+ this.title = title;
+ }
+ public void setTopic(String topic) {
+ this.topic = topic;
+ }
+ public void setSpeaker(String speaker) {
+ this.speaker = speaker;
+ }
+ public void setTime(String time) {
+ this.time = time;
+ }
+ public void setLocation(String location) {
+ this.location = location;
+ }
+ public void setHolder1(String holder1) {
+ this.holder1 = holder1;
+ }
+ public void setHolder2(String holder2) {
+ this.holder2 = holder2;
+ }
+ public void setPoints(String points) {
+ this.points = points;
+ }
+ public void setSpeakerinfo(String speakerinfo) {
+ this.speakerinfo = speakerinfo;
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/Classroom.java b/代码/在这里2.1/src/com/stone/shop/model/Classroom.java
new file mode 100644
index 0000000..85c64eb
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/Classroom.java
@@ -0,0 +1,22 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+public class Classroom extends BmobObject {
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "ClassRoom [name=" + name + "]";
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/Comment.java b/代码/在这里2.1/src/com/stone/shop/model/Comment.java
new file mode 100644
index 0000000..5dfaeed
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/Comment.java
@@ -0,0 +1,27 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+
+public class Comment extends BmobObject{
+
+ public static final String TAG = "Comment";
+
+ private User user;
+ private String commentContent;
+ public User getUser() {
+ return user;
+ }
+ public void setUser(User user) {
+ this.user = user;
+ }
+ public String getCommentContent() {
+ return commentContent;
+ }
+ public void setCommentContent(String commentContent) {
+ this.commentContent = commentContent;
+ }
+
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/Constant.java b/代码/在这里2.1/src/com/stone/shop/model/Constant.java
new file mode 100644
index 0000000..f5d3069
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/Constant.java
@@ -0,0 +1,7 @@
+package com.stone.shop.model;
+
+public class Constant {
+
+ public static final int NUMBERS_PER_PAGE = 15;
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/Discuss.java b/代码/在这里2.1/src/com/stone/shop/model/Discuss.java
new file mode 100644
index 0000000..7c3bdbb
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/Discuss.java
@@ -0,0 +1,127 @@
+package com.stone.shop.model;
+
+import java.io.Serializable;
+
+import cn.bmob.v3.BmobObject;
+import cn.bmob.v3.datatype.BmobFile;
+import cn.bmob.v3.datatype.BmobRelation;
+
+public class Discuss extends BmobObject implements Serializable {
+
+ private User author;
+ private String title;
+ private String content;
+ private BmobFile Contentfigureurl;
+ private int love;
+ private int hate;
+ private int share;
+ private int comment;
+ private boolean isPass;
+ private boolean myFav;// 收藏
+ private boolean myLove;// 赞
+ private BmobRelation relation;
+
+ public BmobRelation getRelation() {
+ return relation;
+ }
+
+ public void setRelation(BmobRelation relation) {
+ this.relation = relation;
+ }
+
+ public User getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(User author) {
+ this.author = author;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public BmobFile getContentfigureurl() {
+ return Contentfigureurl;
+ }
+
+ public void setContentfigureurl(BmobFile contentfigureurl) {
+ Contentfigureurl = contentfigureurl;
+ }
+
+ public int getLove() {
+ return love;
+ }
+
+ public void setLove(int love) {
+ this.love = love;
+ }
+
+ public int getHate() {
+ return hate;
+ }
+
+ public void setHate(int hate) {
+ this.hate = hate;
+ }
+
+ public int getShare() {
+ return share;
+ }
+
+ public void setShare(int share) {
+ this.share = share;
+ }
+
+ public int getComment() {
+ return comment;
+ }
+
+ public void setComment(int comment) {
+ this.comment = comment;
+ }
+
+ public boolean isPass() {
+ return isPass;
+ }
+
+ public void setPass(boolean isPass) {
+ this.isPass = isPass;
+ }
+
+ public boolean getMyFav() {
+ return myFav;
+ }
+
+ public void setMyFav(boolean myFav) {
+ this.myFav = myFav;
+ }
+
+ public boolean getMyLove() {
+ return myLove;
+ }
+
+ public void setMyLove(boolean myLove) {
+ this.myLove = myLove;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return "QiangYu [author=" + author + ", content=" + content + ", Contentfigureurl=" + Contentfigureurl
+ + ", love=" + love + ", hate=" + hate + ", share=" + share + ", comment=" + comment + ", isPass="
+ + isPass + ", myFav=" + myFav + ", myLove=" + myLove + ", relation=" + relation + "]";
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/FeedBack.java b/代码/在这里2.1/src/com/stone/shop/model/FeedBack.java
new file mode 100644
index 0000000..9461f41
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/FeedBack.java
@@ -0,0 +1,49 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+/**
+ * 用户反馈信息
+ * @date 2014-5-27
+ * @author Stone
+ */
+public class FeedBack extends BmobObject {
+
+ private String username;
+ private String phone;
+ private String email;
+ private String content;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/Good.java b/代码/在这里2.1/src/com/stone/shop/model/Good.java
new file mode 100644
index 0000000..b0a9ac8
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/Good.java
@@ -0,0 +1,63 @@
+package com.stone.shop.model;
+
+import java.io.Serializable;
+
+import cn.bmob.v3.BmobObject;
+import cn.bmob.v3.datatype.BmobFile;
+
+/**
+ * 商品实体类
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class Good extends BmobObject implements Serializable{
+
+ private static final long serialVersionUID = -3248168273019127389L;
+
+ //private String id; 商品ID, 默认
+
+ private String shopID = ""; // 商店ID
+ private String shopName = ""; //商店名称
+ private String type = ""; // 类型
+ private String name = ""; // 名称
+ private String price = ""; // 价格
+ private BmobFile picGood = null; // 商品主图
+
+ public Good(String name, String price) {
+ this.name = name;
+ this.price = price;
+ }
+
+ public String getShopID() {
+ return shopID;
+ }
+
+ public void setShopID(String shopID) {
+ this.shopID = shopID;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/LuckyUser.java b/代码/在这里2.1/src/com/stone/shop/model/LuckyUser.java
new file mode 100644
index 0000000..4600723
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/LuckyUser.java
@@ -0,0 +1,28 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+/**
+ * 中奖用户
+ * @date 2014-5-28
+ * @author Stone
+ */
+public class LuckyUser extends BmobObject {
+
+ private String username;
+ private String award;
+
+ public String getUsername() {
+ return username;
+ }
+ public String getAward() {
+ return award;
+ }
+ public void setUsername(String username) {
+ this.username = username;
+ }
+ public void setAward(String award) {
+ this.award = award;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/News.java b/代码/在这里2.1/src/com/stone/shop/model/News.java
new file mode 100644
index 0000000..b169779
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/News.java
@@ -0,0 +1,53 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+/**
+ * 首页校内新闻实体类
+ *
+ * @date 2014-5-3
+ * @author Stone
+ */
+public class News extends BmobObject {
+
+ // private String id;
+ // private String time;
+
+ private String type; // 新闻类型
+ private String title; // 新闻标题
+ private String author; // 新闻作者
+ private String content; // 新闻内容
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/Order.java b/代码/在这里2.1/src/com/stone/shop/model/Order.java
new file mode 100644
index 0000000..4879ef3
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/Order.java
@@ -0,0 +1,92 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+/**
+ * 订单实体类
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class Order extends BmobObject {
+
+ private String userName;
+ private String goodID; // 商品ID
+ private String goodName;
+ private String shopID; // 商店ID
+ private String shopName;
+ private String count; // 数量
+ private String price; // 价格
+ private String time; // 取餐时间
+ private String phone; // 联系电话
+ private String state = "未取餐"; // 订单状态(已取, 未取)
+ private String tips; // 附加信息
+
+ public String getGoodID() {
+ return goodID;
+ }
+ public String getGoodName() {
+ return goodName;
+ }
+ public String getUserName() {
+ return userName;
+ }
+ public String getShopID() {
+ return shopID;
+ }
+ public String getShopName() {
+ return shopName;
+ }
+ public String getCount() {
+ return count;
+ }
+ public String getPrice() {
+ return price;
+ }
+ public String getTime() {
+ return time;
+ }
+ public String getPhone() {
+ return phone;
+ }
+ public String getState() {
+ return state;
+ }
+ public String getTips() {
+ return tips;
+ }
+ public void setGoodID(String goodID) {
+ this.goodID = goodID;
+ }
+ public void setGoodName(String goodName) {
+ this.goodName = goodName;
+ }
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+ public void setShopID(String shopID) {
+ this.shopID = shopID;
+ }
+ public void setShopName(String shopName) {
+ this.shopName = shopName;
+ }
+ public void setCount(String count) {
+ this.count = count;
+ }
+ public void setTime(String time) {
+ this.time = time;
+ }
+ public void setPrice(String price) {
+ this.price = price;
+ }
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+ public void setState(String state) {
+ this.state = state;
+ }
+ public void setTips(String tips) {
+ this.tips = tips;
+ }
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/Reservation.java b/代码/在这里2.1/src/com/stone/shop/model/Reservation.java
new file mode 100644
index 0000000..d1fafaa
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/Reservation.java
@@ -0,0 +1,44 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+public class Reservation extends BmobObject {
+
+ private String roomId;
+ private String roomName;
+ private String userId;
+ private String dateTime;
+
+ public String getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(String roomId) {
+ this.roomId = roomId;
+ }
+
+ public String getRoomName() {
+ return roomName;
+ }
+
+ public void setRoomName(String roomName) {
+ this.roomName = roomName;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getDateTime() {
+ return dateTime;
+ }
+
+ public void setDateTime(String dateTime) {
+ this.dateTime = dateTime;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/SComment.java b/代码/在这里2.1/src/com/stone/shop/model/SComment.java
new file mode 100644
index 0000000..7abf4ae
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/SComment.java
@@ -0,0 +1,61 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobObject;
+
+/**
+ * 店铺评论实体类
+ * @date 2014-5-3
+ * @author Stone
+ */
+public class SComment extends BmobObject {
+
+ // private String id;
+ // private String time;
+
+ private String shopID;
+ private String shopName;
+ private String userID;
+ private String userName;
+ private String content;
+
+ public String getShopID() {
+ return shopID;
+ }
+
+ public void setShopID(String shopID) {
+ this.shopID = shopID;
+ }
+
+ public String getShopName() {
+ return shopName;
+ }
+
+ public void setShopName(String shopName) {
+ this.shopName = shopName;
+ }
+
+ public String getUserID() {
+ return userID;
+ }
+
+ public void setUserID(String userID) {
+ this.userID = userID;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/Shop.java b/代码/在这里2.1/src/com/stone/shop/model/Shop.java
new file mode 100644
index 0000000..5e22bde
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/Shop.java
@@ -0,0 +1,82 @@
+package com.stone.shop.model;
+
+import java.io.Serializable;
+
+import cn.bmob.v3.BmobObject;
+import cn.bmob.v3.datatype.BmobFile;
+
+/**
+ * 店铺实体类, 实现序列化, Activity之间实现传递
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class Shop extends BmobObject implements Serializable{
+
+ private static final long serialVersionUID = -8796635595320697255L;
+
+ private String userID; // 主人
+ private String type; // 类型(11代表第一个GridView中的第一个)
+ private String name; // 店名
+ private String location; // 地理位置
+ private String phone; // 联系电话
+ private String info; // 简介
+ private String sale; // 促销信息
+ private BmobFile picShop; // 商店主图
+
+ public String getUserID() {
+ return userID;
+ }
+
+ public void setUserID(String userID) {
+ this.userID = userID;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+
+ public void setInfo(String info) {
+ this.info = info;
+ }
+
+ public String getSale() {
+ return sale;
+ }
+
+ public void setSale(String sale) {
+ this.sale = sale;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/model/User.java b/代码/在这里2.1/src/com/stone/shop/model/User.java
new file mode 100644
index 0000000..511703e
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/model/User.java
@@ -0,0 +1,106 @@
+package com.stone.shop.model;
+
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.datatype.BmobFile;
+import cn.bmob.v3.datatype.BmobRelation;
+
+/**
+ * 用户实体类
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class User extends BmobUser {
+
+ public static String userId;
+
+ // 父类中已经存在的属性
+ // private String id;
+ // private String username;
+ // private String password;
+ // private String email;
+ // private String regTime;
+
+ private String sex; // 性别
+ private String phone; // 电话
+ private String qq; // QQ
+ private String school = "湖北工业大学"; // 学校
+ private String cademy; // 学院
+ private String dorPart; // 校区
+ private String dorNum; // 寝室号
+ private String state = "未登陆"; // 登录状态
+ private String type = "普通用户"; // 用户类型(普通用户、黑名单、中奖者)
+ //private BmobFile picUser; // 头像
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getSex() {
+ return sex;
+ }
+
+ public void setSex(String sex) {
+ this.sex = sex;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getQQ() {
+ return qq;
+ }
+
+ public void setQQ(String qq) {
+ this.qq = qq;
+ }
+
+ public String getSchool() {
+ return school;
+ }
+
+ public void setSchool(String school) {
+ this.school = school;
+ }
+
+ public String getCademy() {
+ return cademy;
+ }
+
+ public void setCademy(String cademy) {
+ this.cademy = cademy;
+ }
+
+ public String getDorPart() {
+ return dorPart;
+ }
+
+ public void setDorPart(String dorPart) {
+ this.dorPart = dorPart;
+ }
+
+ public String getDorNum() {
+ return dorNum;
+ }
+
+ public void setDorNum(String dorNum) {
+ this.dorNum = dorNum;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/AboutActivity.java b/代码/在这里2.1/src/com/stone/shop/view/AboutActivity.java
new file mode 100644
index 0000000..1e5944c
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/AboutActivity.java
@@ -0,0 +1,21 @@
+package com.stone.shop.view;
+
+import com.stone.shop.R;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * 关于软件
+ * @author Stone
+ */
+public class AboutActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_about);
+ }
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/AwardActivity.java b/代码/在这里2.1/src/com/stone/shop/view/AwardActivity.java
new file mode 100644
index 0000000..3a16359
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/AwardActivity.java
@@ -0,0 +1,120 @@
+package com.stone.shop.view;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.AIContentAdapter;
+import com.stone.shop.model.Discuss;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.ListView;
+import android.widget.Toast;
+import android.widget.AdapterView.OnItemClickListener;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.datatype.BmobDate;
+import cn.bmob.v3.listener.FindListener;
+
+public class AwardActivity extends Activity {
+
+ private ArrayList mListItems;
+ private AIContentAdapter mAdapter;
+ private ListView actualListView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_award);
+
+ initView();
+
+ initData();
+
+ findViewById(R.id.btn_add).setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ startActivityForResult(new Intent(AwardActivity.this, EditActivity.class), 1024);
+ }
+ });
+ }
+
+ private void initView() {
+
+ actualListView = (ListView) findViewById(R.id.pull_refresh_list);
+ actualListView.setOnItemClickListener(new OnItemClickListener() {
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ // TODO Auto-generated method stub
+ // MyApplication.getInstance().setCurrentQiangYu(mListItems.get(position-1));
+ Intent intent = new Intent();
+ intent.setClass(AwardActivity.this, CommentActivity.class);
+ intent.putExtra("data", mListItems.get(position));
+ startActivity(intent);
+ }
+ });
+
+ }
+
+ private void initData() {
+
+ mListItems = new ArrayList();
+ mAdapter = new AIContentAdapter(this, mListItems);
+ actualListView.setAdapter(mAdapter);
+
+ fetchData();
+
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+ private void fetchData() {
+ BmobQuery query = new BmobQuery();
+ query.order("-createdAt");
+ // query.setCachePolicy(CachePolicy.NETWORK_ONLY);
+ // query.setLimit(Constant.NUMBERS_PER_PAGE);
+ query.setLimit(1000);
+ BmobDate date = new BmobDate(new Date(System.currentTimeMillis()));
+ query.addWhereLessThan("createdAt", date);
+ // query.setSkip(Constant.NUMBERS_PER_PAGE*(pageNum++));
+ query.include("author");
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List list) {
+ // TODO Auto-generated method stub
+ if (list != null) {
+ mListItems.clear();
+ mListItems.addAll(list);
+ mAdapter.notifyDataSetChanged();
+ }
+
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast(arg1);
+ }
+ });
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ // TODO Auto-generated method stub
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 1024 && resultCode == RESULT_OK) {
+ fetchData();
+ }
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/BXTActivity.java b/代码/在这里2.1/src/com/stone/shop/view/BXTActivity.java
new file mode 100644
index 0000000..b2fcb93
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/BXTActivity.java
@@ -0,0 +1,100 @@
+package com.stone.shop.view;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.listener.FindListener;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.BXTListAdapter;
+import com.stone.shop.model.BXTNews;
+import com.stone.shop.model.Classroom;
+import com.stone.shop.model.BXTNews;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.renderscript.Element;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+import android.widget.Toast;
+/**
+ * 教学类-博学堂界面
+ * @date 2014-5-10
+ * @author Stone
+ */
+public class BXTActivity extends Activity implements OnItemClickListener{
+
+ private static final String TAG = "BXTActivity";
+
+ private ListView lvBXTNews;
+ private BXTListAdapter mBxtListAdapter;
+ private List mBXTNewsList;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_bxt);
+
+ initView();
+ initData();
+
+ }
+
+ private void initView() {
+ lvBXTNews = (ListView) findViewById(R.id.lv_bxt_news);
+ mBXTNewsList = new ArrayList();
+ mBxtListAdapter = new BXTListAdapter(this, mBXTNewsList);
+ lvBXTNews.setAdapter(mBxtListAdapter);
+ lvBXTNews.setOnItemClickListener(this);
+ }
+
+ private void initData() {
+ BmobQuery query = new BmobQuery();
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List newsList) {
+ //toast("查询商品成功, 共" + newsList.size());
+ if(newsList.size()==0)
+ toast("亲, 暂时还木有讲座哦");
+ else {
+ mBXTNewsList = newsList;
+ mBxtListAdapter.refresh(newsList);
+ mBxtListAdapter.notifyDataSetChanged();
+
+ }
+
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("查询失败");
+ }
+ });
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position,
+ long id) {
+ Intent toBXTNewsActivity = new Intent(BXTActivity.this, BXTNewsActivity.class);
+ toBXTNewsActivity.putExtra("title", mBXTNewsList.get(position).getTitle());
+ toBXTNewsActivity.putExtra("topic", mBXTNewsList.get(position).getTopic());
+ toBXTNewsActivity.putExtra("speaker", mBXTNewsList.get(position).getSpeaker());
+ toBXTNewsActivity.putExtra("time", mBXTNewsList.get(position).getTime());
+ toBXTNewsActivity.putExtra("location", mBXTNewsList.get(position).getLocation());
+ toBXTNewsActivity.putExtra("holder1", mBXTNewsList.get(position).getHolder1());
+ toBXTNewsActivity.putExtra("holder2", mBXTNewsList.get(position).getHolder2());
+ toBXTNewsActivity.putExtra("points", mBXTNewsList.get(position).getPoints());
+ toBXTNewsActivity.putExtra("speakerinfo", mBXTNewsList.get(position).getSpeakerinfo());
+ startActivity(toBXTNewsActivity);
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/BXTNewsActivity.java b/代码/在这里2.1/src/com/stone/shop/view/BXTNewsActivity.java
new file mode 100644
index 0000000..a39c090
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/BXTNewsActivity.java
@@ -0,0 +1,65 @@
+package com.stone.shop.view;
+
+import com.stone.shop.R;
+import com.stone.shop.model.BXTNews;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.widget.TextView;
+
+/**
+ * 教学类-博学堂-讲座详情界面
+ * @date 2014-5-10
+ * @author Stone
+ */
+public class BXTNewsActivity extends Activity {
+
+ private static final String TAG = "BXTNewsActivity";
+
+ private BXTNews news;
+ private TextView tvBXTNewsTitle;
+ private TextView tvBXTNewsTopic;
+ private TextView tvBXTNewsSpeaker;
+ private TextView tvBXTNewsTime;
+ private TextView tvBXTNewsLoc;
+ private TextView tvBXTNewsHolder1;
+ private TextView tvBXTNewsHolder2;
+ private TextView tvBXTNewsPoints;
+ private TextView tvBXTNewsSpeakerInfo;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_bxt_news);
+
+ initView();
+ }
+
+ private void initView() {
+
+ tvBXTNewsTitle = (TextView) findViewById(R.id.tv_bxt_news_title);
+ tvBXTNewsTopic = (TextView) findViewById(R.id.tv_bxt_news_topic);
+ tvBXTNewsSpeaker = (TextView) findViewById(R.id.tv_bxt_news_speaker);
+ tvBXTNewsTime = (TextView) findViewById(R.id.tv_bxt_news_time);
+ tvBXTNewsLoc = (TextView) findViewById(R.id.tv_bxt_news_loc);
+ tvBXTNewsHolder1 = (TextView) findViewById(R.id.tv_bxt_news_holder1);
+ tvBXTNewsHolder2 = (TextView) findViewById(R.id.tv_bxt_news_holder2);
+ tvBXTNewsPoints = (TextView) findViewById(R.id.tv_bxt_news_point);
+ tvBXTNewsSpeakerInfo = (TextView) findViewById(R.id.tv_bxt_news_speaker_info);
+
+ tvBXTNewsTitle.setText(getIntent().getStringExtra("title"));
+ tvBXTNewsTopic.setText(getIntent().getStringExtra("topic"));
+ tvBXTNewsSpeaker.setText(getIntent().getStringExtra("speaker"));
+ tvBXTNewsTime.setText(getIntent().getStringExtra("time"));
+ tvBXTNewsLoc.setText(getIntent().getStringExtra("location"));
+ tvBXTNewsHolder1.setText(getIntent().getStringExtra("holder1"));
+ tvBXTNewsHolder2.setText(getIntent().getStringExtra("holder2"));
+ tvBXTNewsPoints.setText(getIntent().getStringExtra("points"));
+ tvBXTNewsSpeakerInfo.setText(getIntent().getStringExtra("speakerinfo"));
+
+ }
+
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/BaseActivity.java b/代码/在这里2.1/src/com/stone/shop/view/BaseActivity.java
new file mode 100644
index 0000000..e5b4bc6
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/BaseActivity.java
@@ -0,0 +1,104 @@
+package com.stone.shop.view;
+
+import cn.bmob.v3.Bmob;
+
+import com.stone.shop.R;
+import com.stone.shop.view.old.OldMineActivity;
+
+import android.os.Bundle;
+import android.app.TabActivity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.Space;
+import android.widget.TabHost;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * 应用主界面
+ * @date 2014-4-24
+ * @author Stone
+ */
+@SuppressWarnings("deprecation")
+public class BaseActivity extends TabActivity {
+
+ private static final String TAG = "BaseActivity";
+
+ private TabHost tabHost;
+ private LayoutInflater layoutInflater;
+
+
+ String[] mTitle = new String[] { "周边", "讨论区", "我的"};
+ int[] mIcon = new int[] { R.drawable.ic_shop, R.drawable.ic_sale,
+ R.drawable.ic_car, R.drawable.ic_mine };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_base);
+
+ initTabView();
+
+
+ }
+
+ public View getTabItemView(int i) {
+ // TODO Auto-generated method stub
+ View view = layoutInflater.inflate(R.layout.tab_widget_item, null);
+ ImageView imageView = (ImageView) view.findViewById(R.id.imageview);
+ imageView.setImageResource(mIcon[i]);
+ TextView textView = (TextView) view.findViewById(R.id.textview);
+ textView.setText(mTitle[i]);
+ return view;
+ }
+
+ public void initTabView() {
+
+ /**
+ * tabHost.newTabSpec("artist")创建一个标签项,其中artist为它的标签标识符,相当于jsp页面标签的name属性
+ * setIndicator("艺术标签",resources.getDrawable(R.drawable.ic_tab))设置标签显示文本以及标签上的图标(该图标并不是一个图片,而是一个xml文件哦)
+ * setContent(intent)为当前标签指定一个意图
+ * tabHost.addTab(spec); 将标签项添加到标签中
+ */
+
+ tabHost = getTabHost();
+ layoutInflater = LayoutInflater.from(this);
+ TabHost.TabSpec spec;
+
+ Intent intent1 = new Intent(this, ShopActivity.class);
+ spec = tabHost.newTabSpec(mTitle[0]).setIndicator( getTabItemView(0) ).setContent(intent1);
+ tabHost.addTab(spec);
+
+ Intent intent2 = new Intent(this, AwardActivity.class);
+ spec = tabHost.newTabSpec(mTitle[1]).setIndicator( getTabItemView(1) ).setContent(intent2);
+ tabHost.addTab(spec);
+
+ Intent intent3 = new Intent(this, MineActivity.class);
+ spec = tabHost.newTabSpec(mTitle[2]).setIndicator( getTabItemView(2) ).setContent(intent3);
+ tabHost.addTab(spec);
+
+ /*
+ Intent intent3 = new Intent(this, WsqActivity.class);
+ spec = tabHost.newTabSpec(mTitle[2]).setIndicator( getTabItemView(2) ).setContent(intent3);
+ tabHost.addTab(spec);
+
+ Intent intent4 = new Intent(this, OldMineActivity.class);
+ spec = tabHost.newTabSpec(mTitle[3]).setIndicator( getTabItemView(3) ).setContent(intent4);
+ tabHost.addTab(spec); */
+
+ tabHost.setCurrentTab(0);
+ }
+
+ @Override
+ public void onBackPressed() {
+ Toast.makeText(this, "确定要退出在这里么?", Toast.LENGTH_LONG).show();
+ //super.onBackPressed();
+ }
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/ClassroomActivity.java b/代码/在这里2.1/src/com/stone/shop/view/ClassroomActivity.java
new file mode 100644
index 0000000..7707d63
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/ClassroomActivity.java
@@ -0,0 +1,93 @@
+package com.stone.shop.view;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.listener.FindListener;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.BXTListAdapter;
+import com.stone.shop.adapter.ClassroomAdapter;
+import com.stone.shop.model.Classroom;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.GridView;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+public class ClassroomActivity extends Activity implements OnItemClickListener {
+
+ private static final String TAG = "BXTActivity";
+
+ private GridView lvBXTNews;
+ private ClassroomAdapter mBxtListAdapter;
+ private List mBXTNewsList;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_classroom);
+
+ initView();
+ initData();
+
+ }
+
+ private void initView() {
+ lvBXTNews = (GridView) findViewById(R.id.gv_classroom);
+ mBXTNewsList = new ArrayList();
+ mBxtListAdapter = new ClassroomAdapter(this, mBXTNewsList);
+ lvBXTNews.setAdapter(mBxtListAdapter);
+ lvBXTNews.setOnItemClickListener(this);
+
+ TextView tv_title = (TextView) findViewById(R.id.tv_title);
+ tv_title.setText("教室");
+ }
+
+ private void initData() {
+ BmobQuery query = new BmobQuery();
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List newsList) {
+ // toast("查询商品成功, 共" + newsList.size());
+ if (newsList.size() == 0)
+ toast("亲, 暂时还木有教室哦");
+ else {
+ mBXTNewsList = newsList;
+ mBxtListAdapter.refresh(newsList);
+ mBxtListAdapter.notifyDataSetChanged();
+
+ }
+
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("查询失败");
+ }
+ });
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ Intent intent = new Intent(ClassroomActivity.this, ReservationActivity.class);
+ Classroom classroom = mBXTNewsList.get(position);
+ intent.putExtra("roomId", classroom.getObjectId());
+ intent.putExtra("roomName", classroom.getName());
+ startActivity(intent);
+
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/CommentActivity.java b/代码/在这里2.1/src/com/stone/shop/view/CommentActivity.java
new file mode 100644
index 0000000..d098d4b
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/CommentActivity.java
@@ -0,0 +1,424 @@
+package com.stone.shop.view;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.CommentAdapter;
+import com.stone.shop.model.Comment;
+import com.stone.shop.model.Constant;
+import com.stone.shop.model.Discuss;
+import com.stone.shop.model.User;
+import com.stone.util.ActivityUtil;
+import com.stone.util.ToastFactory;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.datatype.BmobFile;
+import cn.bmob.v3.datatype.BmobPointer;
+import cn.bmob.v3.datatype.BmobRelation;
+import cn.bmob.v3.listener.FindListener;
+import cn.bmob.v3.listener.SaveListener;
+import cn.bmob.v3.listener.UpdateListener;
+
+public class CommentActivity extends Activity implements OnClickListener {
+
+ private ListView commentList;
+ private TextView footer;
+
+ private EditText commentContent;
+ private Button commentCommit;
+
+ private TextView userName;
+ private TextView commentItemContent;
+ private ImageView commentItemImage;
+
+ private ImageView userLogo;
+ private TextView comment;
+ private TextView share;
+ private TextView love;
+ private TextView hate;
+ private TextView title_text;
+ private TextView time_text;
+
+ private Discuss qiangYu;
+ private String commentEdit = "";
+
+ private CommentAdapter mAdapter;
+
+ private List comments = new ArrayList();
+
+ private int pageNum;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // TODO Auto-generated method stub
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_comment);
+
+ findViews();
+ setupViews();
+ setListener();
+ fetchData();
+
+ }
+
+ private void findViews() {
+ // TODO Auto-generated method stub
+ commentList = (ListView) findViewById(R.id.comment_list);
+ footer = (TextView) findViewById(R.id.loadmore);
+
+ commentContent = (EditText) findViewById(R.id.comment_content);
+ commentCommit = (Button) findViewById(R.id.comment_commit);
+
+ userName = (TextView) findViewById(R.id.user_name);
+ commentItemContent = (TextView) findViewById(R.id.content_text);
+ commentItemImage = (ImageView) findViewById(R.id.content_image);
+
+ userLogo = (ImageView) findViewById(R.id.user_logo);
+ comment = (TextView) findViewById(R.id.item_action_comment);
+ share = (TextView) findViewById(R.id.item_action_share);
+ love = (TextView) findViewById(R.id.item_action_love);
+ hate = (TextView) findViewById(R.id.item_action_hate);
+
+ title_text = (TextView) findViewById(R.id.title_text);
+ time_text = (TextView) findViewById(R.id.time_text);
+
+ }
+
+ private void setupViews() {
+ // TODO Auto-generated method stub
+ getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
+ | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
+ qiangYu = (Discuss) getIntent().getSerializableExtra("data");// MyApplication.getInstance().getCurrentQiangYu();
+ pageNum = 0;
+
+ mAdapter = new CommentAdapter(this, comments);
+ commentList.setAdapter(mAdapter);
+ setListViewHeightBasedOnChildren(commentList);
+ commentList.setOnItemClickListener(new OnItemClickListener() {
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ // TODO Auto-generated method stub
+ }
+ });
+ commentList.setCacheColorHint(0);
+ commentList.setScrollingCacheEnabled(false);
+ commentList.setScrollContainer(false);
+ commentList.setFastScrollEnabled(true);
+ commentList.setSmoothScrollbarEnabled(true);
+
+ initMoodView(qiangYu);
+ }
+
+ private void initMoodView(Discuss mood2) {
+ // TODO Auto-generated method stub
+ if (mood2 == null) {
+ return;
+ }
+ userName.setText(qiangYu.getAuthor().getUsername());
+ commentItemContent.setText(qiangYu.getContent());
+ if (null == qiangYu.getContentfigureurl()) {
+ commentItemImage.setVisibility(View.GONE);
+ } else {
+ commentItemImage.setVisibility(View.VISIBLE);
+
+ }
+
+ love.setText(qiangYu.getLove() + "");
+ if (qiangYu.getMyLove()) {
+ love.setTextColor(Color.parseColor("#D95555"));
+ } else {
+ love.setTextColor(Color.parseColor("#000000"));
+ }
+ hate.setText(qiangYu.getHate() + "");
+ time_text.setText(mood2.getCreatedAt());
+ title_text.setText(mood2.getTitle());
+ }
+
+ private void setListener() {
+ // TODO Auto-generated method stub
+ footer.setOnClickListener(this);
+ commentCommit.setOnClickListener(this);
+
+ userLogo.setOnClickListener(this);
+ love.setOnClickListener(this);
+ hate.setOnClickListener(this);
+ share.setOnClickListener(this);
+ comment.setOnClickListener(this);
+ }
+
+ private void fetchData() {
+ // TODO Auto-generated method stub
+ fetchComment();
+ }
+
+ private void fetchComment() {
+ BmobQuery query = new BmobQuery();
+ query.addWhereRelatedTo("relation", new BmobPointer(qiangYu));
+ query.include("user");
+ query.order("createdAt");
+ query.setLimit(Constant.NUMBERS_PER_PAGE);
+ query.setSkip(Constant.NUMBERS_PER_PAGE * (pageNum++));
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List data) {
+ // TODO Auto-generated method stub
+ if (data.size() != 0 && data.get(data.size() - 1) != null) {
+
+ if (data.size() < Constant.NUMBERS_PER_PAGE) {
+ toast("已加载完所有评论~");
+ footer.setText("暂无更多评论~");
+ }
+
+ mAdapter.getDataList().addAll(data);
+ mAdapter.notifyDataSetChanged();
+ setListViewHeightBasedOnChildren(commentList);
+ } else {
+ toast("暂无更多评论~");
+ footer.setText("暂无更多评论~");
+ pageNum--;
+ }
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast("获取评论失败。请检查网络~");
+ pageNum--;
+ }
+ });
+ }
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ switch (v.getId()) {
+ case R.id.user_logo:
+ // onClickUserLogo();
+ break;
+ case R.id.loadmore:
+ onClickLoadMore();
+ break;
+ case R.id.comment_commit:
+ onClickCommit();
+ break;
+ case R.id.item_action_love:
+ onClickLove();
+ break;
+ case R.id.item_action_hate:
+ onClickHate();
+ break;
+ case R.id.item_action_share:
+// onClickShare();
+ break;
+ case R.id.item_action_comment:
+ onClickComment();
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void onClickLoadMore() {
+ // TODO Auto-generated method stub
+ fetchData();
+ }
+
+ private void onClickCommit() {
+ // TODO Auto-generated method stub
+ User currentUser = BmobUser.getCurrentUser(this, User.class);
+ if (currentUser != null) {// 已登录
+ commentEdit = commentContent.getText().toString().trim();
+ if (TextUtils.isEmpty(commentEdit)) {
+ toast("评论内容不能为空。");
+ return;
+ }
+ // comment now
+ publishComment(currentUser, commentEdit);
+ } else {// 未登录
+ toast("发表评论前请先登录。");
+
+ }
+
+ }
+
+ private void publishComment(User user, String content) {
+
+ final Comment comment = new Comment();
+ comment.setUser(user);
+ comment.setCommentContent(content);
+ comment.save(this, new SaveListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ toast("评论成功。");
+ if (mAdapter.getDataList().size() < Constant.NUMBERS_PER_PAGE) {
+ mAdapter.getDataList().add(comment);
+ mAdapter.notifyDataSetChanged();
+ setListViewHeightBasedOnChildren(commentList);
+ }
+ commentContent.setText("");
+ hideSoftInput();
+
+ // 将该评论与强语绑定到一起
+ BmobRelation relation = new BmobRelation();
+ relation.add(comment);
+ qiangYu.setRelation(relation);
+ qiangYu.update(CommentActivity.this, new UpdateListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ // fetchData();
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ }
+ });
+
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast("评论失败。请检查网络~");
+ }
+ });
+ }
+
+
+ boolean isFav = false;
+
+ private void onClickLove() {
+ // TODO Auto-generated method stub
+ User user = BmobUser.getCurrentUser(this, User.class);
+ if (user == null) {
+ // 前往登录注册界面
+ ActivityUtil.show(this, "请先登录。");
+ return;
+ }
+ if (qiangYu.getMyLove()) {
+ ActivityUtil.show(CommentActivity.this, "您已经赞过啦");
+ return;
+ }
+ isFav = qiangYu.getMyFav();
+ if (isFav) {
+ qiangYu.setMyFav(false);
+ }
+ qiangYu.setLove(qiangYu.getLove() + 1);
+ love.setTextColor(Color.parseColor("#D95555"));
+ love.setText(qiangYu.getLove() + "");
+ qiangYu.increment("love", 1);
+ qiangYu.update(this, new UpdateListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ qiangYu.setMyLove(true);
+ qiangYu.setMyFav(isFav);
+
+ ActivityUtil.show(CommentActivity.this, "点赞成功~");
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ }
+ });
+ }
+
+ private void onClickHate() {
+ // TODO Auto-generated method stub
+ qiangYu.setHate(qiangYu.getHate() + 1);
+ hate.setText(qiangYu.getHate() + "");
+ qiangYu.increment("hate", 1);
+ qiangYu.update(this, new UpdateListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ ActivityUtil.show(CommentActivity.this, "点踩成功~");
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+ }
+
+
+ private void onClickComment() {
+ // TODO Auto-generated method stub
+ commentContent.requestFocus();
+
+ InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
+
+ imm.showSoftInput(commentContent, 0);
+ }
+
+ private void hideSoftInput() {
+ InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
+
+ imm.hideSoftInputFromWindow(commentContent.getWindowToken(), 0);
+ }
+
+
+ /***
+ * 动态设置listview的高度 item 总布局必须是linearLayout
+ *
+ * @param listView
+ */
+ public void setListViewHeightBasedOnChildren(ListView listView) {
+ ListAdapter listAdapter = listView.getAdapter();
+ if (listAdapter == null) {
+ return;
+ }
+ int totalHeight = 0;
+ for (int i = 0; i < listAdapter.getCount(); i++) {
+ View listItem = listAdapter.getView(i, null, listView);
+ listItem.measure(0, 0);
+ totalHeight += listItem.getMeasuredHeight();
+ }
+ ViewGroup.LayoutParams params = listView.getLayoutParams();
+ params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)) + 15;
+ listView.setLayoutParams(params);
+ }
+
+ private void toast(String message) {
+ Toast toast = ToastFactory.getToast(this, message);
+ toast.setGravity(Gravity.BOTTOM, 0, 0);
+ toast.show();
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/EditActivity.java b/代码/在这里2.1/src/com/stone/shop/view/EditActivity.java
new file mode 100644
index 0000000..f761bac
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/EditActivity.java
@@ -0,0 +1,99 @@
+package com.stone.shop.view;
+
+import com.stone.shop.R;
+import com.stone.shop.model.Discuss;
+import com.stone.shop.model.User;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.EditText;
+import android.widget.Toast;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.datatype.BmobFile;
+import cn.bmob.v3.listener.SaveListener;
+
+public class EditActivity extends Activity {
+
+ private EditText edit_title;
+ private EditText edit_content;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // TODO Auto-generated method stub
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.activity_edit);
+
+ initView();
+
+ findViewById(R.id.btn_publish).setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ String title = edit_title.getText().toString().trim();
+ String content = edit_content.getText().toString().trim();
+
+ if (TextUtils.isEmpty(title)) {
+ toast("标题不能为空");
+ return;
+ }
+
+ if (TextUtils.isEmpty(content)) {
+ toast("内容不能为空");
+ return;
+ }
+ publishWithoutFigure(title ,content, null);
+ }
+ });
+ }
+
+ private void initView() {
+ edit_title = (EditText) findViewById(R.id.edit_title);
+ edit_content = (EditText) findViewById(R.id.edit_content);
+
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+ private void publishWithoutFigure(final String title, final String commitContent,
+ final BmobFile figureFile) {
+
+ User user = BmobUser.getCurrentUser(this, User.class);
+
+ final Discuss qiangYu = new Discuss();
+ qiangYu.setAuthor(user);
+ qiangYu.setTitle(title);
+ qiangYu.setContent(commitContent);
+ if (figureFile != null) {
+ qiangYu.setContentfigureurl(figureFile);
+ }
+ qiangYu.setLove(0);
+ qiangYu.setHate(0);
+ qiangYu.setShare(0);
+ qiangYu.setComment(0);
+ qiangYu.setPass(true);
+ qiangYu.save(this, new SaveListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ toast("发表成功!");
+ setResult(RESULT_OK);
+ finish();
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast("发表失败!");
+ }
+ });
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/FeedBackActivity.java b/代码/在这里2.1/src/com/stone/shop/view/FeedBackActivity.java
new file mode 100644
index 0000000..af75344
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/FeedBackActivity.java
@@ -0,0 +1,103 @@
+package com.stone.shop.view;
+
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.listener.SaveListener;
+
+import com.stone.shop.R;
+import com.stone.shop.model.FeedBack;
+import com.stone.shop.model.User;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+/**
+ * 意见反馈界面
+ *
+ * @date 2014-5-27
+ * @author Stone
+ */
+public class FeedBackActivity extends Activity implements OnClickListener {
+
+ private static final String TAG = "FeedBackActivity";
+
+ private EditText etContent;
+ private Button btnSubmit;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_feedback);
+
+ initView();
+ }
+
+ private void initView() {
+ etContent = (EditText) findViewById(R.id.et_feedback_content);
+ btnSubmit = (Button) findViewById(R.id.btn_feedback_submit);
+ btnSubmit.setOnClickListener(this);
+ }
+
+ /**
+ * 提交用户的反馈信息
+ */
+ private void submit() {
+ String content = etContent.getText().toString();
+ if (content.equals("")) {
+ toast("亲,请先写点东西吧");
+ } else {
+ BmobUser user = BmobUser.getCurrentUser(this);
+ FeedBack fb = new FeedBack();
+ fb.setUsername(user.getUsername());
+ fb.setEmail(user.getEmail());
+ fb.setContent(content);
+ fb.save(this, new SaveListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ toast("提交成功, 在这里会尽快回复");
+ back();
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast("提交失败");
+ }
+ });
+
+ }
+
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btn_feedback_submit:
+ submit();
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ private void back() {
+ finish();
+ }
+
+ public void clickFeedBack(View v) {
+ finish();
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/HomeActivity.java b/代码/在这里2.1/src/com/stone/shop/view/HomeActivity.java
new file mode 100644
index 0000000..ef4e9c5
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/HomeActivity.java
@@ -0,0 +1,195 @@
+package com.stone.shop.view;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.opengl.Visibility;
+import android.os.Bundle;
+import android.support.v4.view.ViewPager.OnPageChangeListener;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.ImageView.ScaleType;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import cn.bmob.v3.Bmob;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.listener.FindListener;
+import cn.bmob.v3.listener.GetServerTimeListener;
+
+import com.stone.date.TypeDef;
+import com.stone.shop.R;
+import com.stone.shop.adapter.ImagePagerAdapter;
+import com.stone.shop.adapter.NewsListAdapter;
+import com.stone.shop.model.News;
+import com.stone.shop.model.Shop;
+import com.stone.ui.AutoScrollViewPager;
+import com.stone.ui.ListScrollView;
+
+/**
+ * 主界面
+ *
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class HomeActivity extends Activity implements OnClickListener,
+ OnItemClickListener {
+
+ private static final String TAG = "HomeActivity";
+
+ private ListScrollView listScrollView;
+
+ // 校历
+ private TextView tvWeek; // 周次和星期
+ private TextView tvDay; // 年月日
+
+ // 图片轮播
+ private FrameLayout flImageAds;
+ private AutoScrollViewPager viewPager;
+ private List mImgViews;
+ private ImageButton btnHideAds;
+ private int[] mImgResId = { R.drawable.ic_banner1, R.drawable.ic_banner1,
+ R.drawable.ic_banner1, R.drawable.ic_banner1 };
+
+ // 校园新闻
+ private ListView lvNewsList;
+ private List newsList = new ArrayList();
+ private NewsListAdapter newsListAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_home);
+
+ // 解决ScrollView和ListView之间的冲突
+ listScrollView = (ListScrollView) findViewById(R.id.listScrollView);
+ lvNewsList = (ListView) findViewById(R.id.lv_news);
+ listScrollView.setListView(lvNewsList);
+
+ flImageAds = (FrameLayout) findViewById(R.id.fl_image_ads);
+ viewPager = (AutoScrollViewPager) findViewById(R.id.view_pager);
+ btnHideAds = (ImageButton) findViewById(R.id.btn_hide_ads);
+
+ mImgViews = new ArrayList();
+ for (int i = 0; i < mImgResId.length; i++) {
+ ImageView imageView = new ImageView(this);
+ imageView.setImageResource(mImgResId[i]);
+ imageView.setScaleType(ScaleType.CENTER_CROP);
+ mImgViews.add(imageView);
+ }
+
+ btnHideAds.setOnClickListener(this);
+
+ viewPager.setAdapter(new ImagePagerAdapter(this, mImgViews));
+ viewPager.setInterval(3000); // 设置自动滚动的间隔时间,单位为毫秒
+ viewPager.setDirection(AutoScrollViewPager.RIGHT); // 设置自动滚动的方向,默认向右
+ viewPager.setCycle(true); // 是否自动循环轮播,默认为true
+ viewPager.setScrollDurationFactor(3); // 设置ViewPager滑动动画间隔时间的倍率,达到减慢动画或改变动画速度的效果
+ viewPager.setStopScrollWhenTouch(true); // 当手指碰到ViewPager时是否停止自动滚动,默认为true
+ viewPager.setBorderAnimation(true); // 设置循环滚动时滑动到从边缘滚动到下一个是否需要动画,默认为true
+ viewPager
+ .setSlideBorderMode(AutoScrollViewPager.SLIDE_BORDER_MODE_NONE);// 滑动到第一个或最后一个Item的处理方式,支持没有任何操作、轮播以及传递到父View三种模式
+
+ viewPager.startAutoScroll();
+
+ // 校历
+ tvWeek = (TextView) findViewById(R.id.tv_week);
+ tvDay = (TextView) findViewById(R.id.tv_day);
+ setTime();
+
+ // 新闻
+ newsListAdapter = new NewsListAdapter(this, newsList);
+ lvNewsList.setAdapter(newsListAdapter);
+ lvNewsList.setOnItemClickListener(this);
+
+ getNewsData();
+ }
+
+ /**
+ * 设置校历中日期的时间
+ */
+ public void setTime() {
+ Calendar calendar = Calendar.getInstance();
+ String year = calendar.get(Calendar.YEAR)+"";
+ String month = calendar.get(Calendar.MONTH)+1+"";
+ String day = calendar.get(Calendar.DAY_OF_MONTH)+"";
+ String week = calendar.get(Calendar.WEEK_OF_YEAR)-9+"";
+ String dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)+"";
+ String chDayOfWeek = TypeDef.chDayOfWeek[Integer.parseInt(dayOfWeek)-1];
+ toast(year+"-"+month+"-"+day+" "+" 第 "+week+" 周 "+" "+" 星期 "+chDayOfWeek);
+ tvWeek.setText(" 第 "+week+" 周 "+" "+" 星期 "+chDayOfWeek);
+ tvDay.setText(year+" 年 "+month+" 月 "+day+" 日");
+ }
+
+ /**
+ * 初始化新闻列表数据
+ * @date 2014-5-3
+ * @author Stone
+ */
+ public void getNewsData() {
+ BmobQuery query = new BmobQuery();
+ query.order("-updatedAt");
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List object) {
+ newsList = object;
+ // 通知Adapter数据更新
+ newsListAdapter.refresh((ArrayList) newsList);
+ newsListAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("对不起, 获取数据失败了");
+ }
+ });
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ // start auto scroll when onResume
+ viewPager.startAutoScroll();
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btn_hide_ads:
+ flImageAds.setVisibility(View.GONE);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position,
+ long id) {
+ Intent toNewsDetail = new Intent(HomeActivity.this, NewsActivity.class);
+ toNewsDetail.putExtra("NewsTitle", newsList.get(position).getTitle());
+ toNewsDetail.putExtra("NewsAuthor", newsList.get(position).getAuthor());
+ toNewsDetail.putExtra("NewsTime", newsList.get(position).getCreatedAt());
+ toNewsDetail.putExtra("NewsContent", newsList.get(position).getContent());
+ startActivity(toNewsDetail);
+ }
+
+ public void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT);
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/LoginActivity.java b/代码/在这里2.1/src/com/stone/shop/view/LoginActivity.java
new file mode 100644
index 0000000..5993407
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/LoginActivity.java
@@ -0,0 +1,346 @@
+package com.stone.shop.view;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.SystemClock;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+import cn.bmob.v3.Bmob;
+import cn.bmob.v3.listener.SaveListener;
+
+import com.stone.shop.R;
+import com.stone.shop.model.User;
+import com.stone.util.Util;
+import com.tencent.connect.UserInfo;
+import com.tencent.connect.auth.QQAuth;
+import com.tencent.connect.common.Constants;
+import com.tencent.tauth.IUiListener;
+import com.tencent.tauth.Tencent;
+import com.tencent.tauth.UiError;
+
+/**
+ * 登陆界面
+ *
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class LoginActivity extends Activity implements OnClickListener {
+
+ private static final String TAG = "LoginActicity";
+
+ private Button btnLogin;
+ private Button btnReg;
+ private EditText etUsername;
+ private EditText etPassword;
+
+ private String username;
+ private String password;
+
+ private static final String APP_ID = "222222";
+ private UserInfo mInfo;
+ private TextView mUserInfo;
+ private ImageView mUserLogo;
+ private ImageView mNewLoginButton;
+ private TextView backInfo;
+
+ // QQ登陆
+ private static Tencent mTencent;
+ // private QQAuth mQQAuth;
+
+ Handler mHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ if (msg.what == 0) {
+ JSONObject response = (JSONObject) msg.obj;
+ if (response.has("nickname")) {
+ try {
+ mUserInfo.setVisibility(android.view.View.VISIBLE);
+ mUserInfo.setText(response.getString("nickname"));
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ } else if (msg.what == 1) {
+ Bitmap bitmap = (Bitmap) msg.obj;
+ mUserLogo.setImageBitmap(bitmap);
+ mUserLogo.setVisibility(android.view.View.VISIBLE);
+ }
+ }
+
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // 初始化 Bmob SDK
+ // 使用时请将第二个参数Application ID替换成你在Bmob服务器端创建的Application ID
+ Bmob.initialize(this, "252a2c58d0dc9a78a5411501c62ce0de");
+ setContentView(R.layout.activity_login);
+
+ // QQ登陆, 获取实例
+ // mQQAuth = QQAuth.createInstance(APP_ID,
+ // this.getApplicationContext());
+ mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
+
+ btnLogin = (Button) findViewById(R.id.btn_login);
+ btnReg = (Button) findViewById(R.id.btn_register);
+
+ etUsername = (EditText) findViewById(R.id.et_username);
+ etPassword = (EditText) findViewById(R.id.et_password);
+
+ btnLogin.setOnClickListener(this);
+ btnReg.setOnClickListener(this);
+
+ findViewById(R.id.btn_qq).setOnClickListener(this);
+
+ mUserInfo = (TextView) findViewById(R.id.user_nickname);
+ mUserLogo = (ImageView) findViewById(R.id.user_logo);
+ mNewLoginButton = (ImageView) findViewById(R.id.new_login_btn);
+ mNewLoginButton.setOnClickListener(this);
+ backInfo = (TextView) findViewById(R.id.user_callback);
+
+ getUserInfo();
+
+ }
+
+ private void getUserInfo() {
+ SharedPreferences sp = getSharedPreferences("UserInfo", 0);
+ etUsername.setText(sp.getString("username", null));
+ etPassword.setText(sp.getString("password", null));
+ }
+
+ // 保存用户的登陆记录
+ private void saveUserInfo(String username, String password) {
+ SharedPreferences sp = getSharedPreferences("UserInfo", 0);
+ Editor editor = sp.edit();
+ editor.putString("username", username);
+ editor.putString("password", password);
+ editor.commit();
+ }
+
+ public void onClickLogin() {
+ if (!mTencent.isSessionValid()) {
+ mTencent.login(this, "all", loginListener);
+ Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" + SystemClock.elapsedRealtime());
+ } else {
+
+ mTencent.logout(this);
+ updateUserInfo();
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ // 登陆
+ case R.id.btn_login:
+ username = etUsername.getText().toString();
+ password = etPassword.getText().toString();
+
+ if (!Util.isNetworkConnected(this)) {
+ toast("木有网络 ( ⊙ o ⊙ ) ");
+ } else if (username.equals("") || password.equals("")) {
+ toast("请输入账号和密码");
+ break;
+ } else {
+ final User bu2 = new User();
+ bu2.setUsername(username);
+ bu2.setPassword(password);
+ bu2.login(this, new SaveListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ toast("欢迎进入 在这里 服务系统");
+ // 保存用户信息
+ saveUserInfo(username, password);
+ // 跳转到主页
+ User.userId = bu2.getObjectId();
+ Intent toHome = new Intent(LoginActivity.this, BaseActivity.class);
+ startActivity(toHome);
+ finish();
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast("用户名或密码错误");
+ }
+ });
+ }
+ break;
+
+ case R.id.btn_register:
+ Intent toReg = new Intent(LoginActivity.this, RegisterActivity.class);
+ startActivity(toReg);
+ break;
+ case R.id.btn_qq:
+
+ onClickLogin();
+
+ break;
+
+ default:
+ break;
+
+ }
+ }
+
+ public void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+ IUiListener loginListener = new BaseUiListener() {
+ @Override
+ protected void doComplete(JSONObject values) {
+ Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime());
+ initOpenidAndToken(values);
+ updateUserInfo();
+ }
+ };
+
+ private class BaseUiListener implements IUiListener {
+
+ @Override
+ public void onComplete(Object response) {
+ if (null == response) {
+ Util.showResultDialog(LoginActivity.this, "返回为空", "登录失败");
+ return;
+ }
+ JSONObject jsonResponse = (JSONObject) response;
+ if (null != jsonResponse && jsonResponse.length() == 0) {
+ Util.showResultDialog(LoginActivity.this, "返回为空", "登录失败");
+ return;
+ }
+ // Util.showResultDialog(LoginActivity.this, response.toString(),
+ // "登录成功");
+ doComplete((JSONObject) response);
+ try {
+ User.userId = jsonResponse.getString("openid");
+ } catch (JSONException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ Intent toHome = new Intent(LoginActivity.this, BaseActivity.class);
+ startActivity(toHome);
+ finish();
+ }
+
+ protected void doComplete(JSONObject values) {
+
+ }
+
+ @Override
+ public void onError(UiError e) {
+ Util.toastMessage(LoginActivity.this, "onError: " + e.errorDetail);
+ Util.dismissDialog();
+ }
+
+ @Override
+ public void onCancel() {
+ Util.toastMessage(LoginActivity.this, "onCancel: ");
+ Util.dismissDialog();
+ }
+ }
+
+ private void updateUserInfo() {
+ if (mTencent != null && mTencent.isSessionValid()) {
+ IUiListener listener = new IUiListener() {
+
+ @Override
+ public void onError(UiError e) {
+
+ }
+
+ @Override
+ public void onComplete(final Object response) {
+ Message msg = new Message();
+ msg.obj = response;
+ msg.what = 0;
+ mHandler.sendMessage(msg);
+ new Thread() {
+
+ @Override
+ public void run() {
+ JSONObject json = (JSONObject) response;
+ if (json.has("figureurl")) {
+ Bitmap bitmap = null;
+ try {
+ bitmap = Util.getbitmap(json.getString("figureurl_qq_2"));
+ } catch (JSONException e) {
+
+ }
+ Message msg = new Message();
+ msg.obj = bitmap;
+ msg.what = 1;
+ mHandler.sendMessage(msg);
+ }
+ }
+
+ }.start();
+ }
+
+ @Override
+ public void onCancel() {
+
+ }
+ };
+ mInfo = new UserInfo(this, mTencent.getQQToken());
+ mInfo.getUserInfo(listener);
+
+ } else {
+ mUserInfo.setText("");
+ mUserInfo.setVisibility(android.view.View.GONE);
+ mUserLogo.setVisibility(android.view.View.GONE);
+ }
+ }
+
+ public static void initOpenidAndToken(JSONObject jsonObject) {
+ try {
+ String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
+ String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
+ String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
+ if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires) && !TextUtils.isEmpty(openId)) {
+ mTencent.setAccessToken(token, expires);
+ mTencent.setOpenId(openId);
+ }
+ } catch (Exception e) {
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ Log.d(TAG, "-->onActivityResult " + requestCode + " resultCode=" + resultCode);
+ if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) {
+ Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
+ }
+
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/MineActivity.java b/代码/在这里2.1/src/com/stone/shop/view/MineActivity.java
new file mode 100644
index 0000000..5e612f4
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/MineActivity.java
@@ -0,0 +1,202 @@
+package com.stone.shop.view;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+import android.widget.Toast;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.listener.CountListener;
+
+import com.stone.date.MessageDef;
+import com.stone.shop.R;
+import com.stone.shop.adapter.MineListAdapter;
+import com.stone.shop.model.Order;
+
+/**
+ * 个人中心主界面
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class MineActivity extends Activity implements OnItemClickListener{
+
+ private static final String TAG = "MineActivity" ;
+
+ private String[] userItemNames = {"stonekity"} ;
+ private String[] userItemContents = {""} ;
+ private String[] orderItemNames = {"当前订单", "历史订单"};
+ private String[] orderItemContents = {"*", ""};
+ private String[] aboutItemNames = {"通知中心", "软件相关", "推荐给朋友", "退出账号"};
+ private String[] aboutItemContents = {"", "", "", ""};
+
+ private int[] userImgIds = {R.drawable.ic_menu_myplaces};
+ private int[] orderImgIds = {R.drawable.ic_menu_find_holo_light, R.drawable.ic_menu_copy_holo_light};
+ private int[] aboutImgIds = {R.drawable.ic_menu_notifications, R.drawable.ic_menu_info_details, R.drawable.ic_menu_share, R.drawable.ic_star_yes};
+
+ private ListView lvMineUser;
+ private ListView lvMineOrder;
+ private ListView lvMineAbout;
+ private MineListAdapter userListAdapter;
+ private MineListAdapter orderListAdapter;
+ private MineListAdapter aboutListAdapter;
+
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MessageDef.MINE_FINISH_LOAD_DATA:
+ //toast("Handler 收到数据加载完成的消息");
+ orderListAdapter.notifyDataSetChanged();
+ break;
+ default:
+ break;
+ }
+ }
+};
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine);
+
+ initData("已取餐");
+ initData("未取餐");
+ initView();
+ }
+
+ private void initView() {
+
+ lvMineUser = (ListView) findViewById(R.id.lv_mine_user);
+ lvMineOrder = (ListView) findViewById(R.id.lv_mine_order);
+ lvMineAbout = (ListView) findViewById(R.id.lv_mine_about);
+
+ userListAdapter = new MineListAdapter(this, userItemNames, userItemContents, userImgIds);
+ orderListAdapter = new MineListAdapter(this, orderItemNames, orderItemContents, orderImgIds);
+ aboutListAdapter = new MineListAdapter(this, aboutItemNames, aboutItemContents, aboutImgIds);
+
+ lvMineUser.setAdapter(userListAdapter);
+ lvMineOrder.setAdapter(orderListAdapter);
+ lvMineAbout.setAdapter(aboutListAdapter);
+
+ lvMineUser.setOnItemClickListener(this);
+ lvMineOrder.setOnItemClickListener(this);
+ lvMineAbout.setOnItemClickListener(this);
+
+ }
+
+ //初始化列表菜单中数据
+ public void initData(final String type) {
+ //获取用户
+ BmobUser user = BmobUser.getCurrentUser(this);
+ userItemNames[0] = user.getUsername();
+
+ //获取小菜订单(数量)
+ BmobQuery query = new BmobQuery();
+ query.order("-updatedAt");
+ query.addWhereEqualTo("userName", user.getUsername());
+ query.addWhereEqualTo("state", type);
+ query.count(this, Order.class, new CountListener() {
+
+ @Override
+ public void onSuccess(int count) {
+ if(type.equals("未取餐")) {
+ orderItemContents[0] ="( " +count+ " )";
+ }
+ if(type.equals("已取餐")) {
+ orderItemContents[1] ="( " +count+ " )";
+ }
+ Message msg = new Message();
+ msg.what = MessageDef.MINE_FINISH_LOAD_DATA;
+ mHandler.sendMessage(msg);
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ toast("查询失败");
+ }
+ });
+
+ }
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position,
+ long id) {
+
+ //个人资料
+ if(parent.getId() == R.id.lv_mine_user) {
+ switch (position) {
+ case 0: //资料卡
+ //toast("点击个人资料");
+ Intent toMineInfo = new Intent(MineActivity.this, MineInfoActivity.class);
+ startActivity(toMineInfo);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ //小菜订单
+ if(parent.getId() == R.id.lv_mine_order) {
+ //toast("点击了订单区域");
+ Intent toOrderInfo;
+ switch (position) {
+ case 0:
+ toOrderInfo = new Intent(MineActivity.this, OrderInfoActivity.class);
+ toOrderInfo.putExtra("type", "now");
+ startActivity(toOrderInfo);
+ break;
+ case 1:
+ toOrderInfo = new Intent(MineActivity.this, OrderInfoActivity.class);
+ toOrderInfo.putExtra("type", "old");
+ startActivity(toOrderInfo);
+ break;
+ default:
+ break;
+ }
+ }
+
+ //其他
+ if(parent.getId() == R.id.lv_mine_about) {
+
+ switch (position) {
+ case 1: //软件相关
+ Intent toMineSoft = new Intent(MineActivity.this, MineSoftActivity.class);
+ startActivity(toMineSoft);
+ break;
+ case 2: //推荐给朋友
+ Intent toShare = new Intent(Intent.ACTION_SEND);
+ toShare.setType("text/plain");
+ toShare.putExtra(Intent.EXTRA_SUBJECT, "分享");
+ toShare.putExtra(Intent.EXTRA_TEXT, "校园小菜-HBUT版" +"\n" + "针对湖工大的校园小菜测试版上线了,赶紧下载体验吧"
+ + "http://xiaocai.bmob.cn");
+ startActivity(Intent.createChooser(toShare, "分享到"));
+ break;
+ case 3: //退出当期账号
+ BmobUser.logOut(this);
+ Intent toLogin = new Intent(MineActivity.this, LoginActivity.class);
+ startActivity(toLogin);
+ finish();
+ break;
+
+ default:
+ //toast("点击了通知区域");
+ break;
+ }
+
+ }
+
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/MineInfoActivity.java b/代码/在这里2.1/src/com/stone/shop/view/MineInfoActivity.java
new file mode 100644
index 0000000..d5ce189
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/MineInfoActivity.java
@@ -0,0 +1,124 @@
+package com.stone.shop.view;
+
+import java.util.List;
+
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.listener.FindListener;
+
+import com.stone.date.MessageDef;
+import com.stone.shop.R;
+import com.stone.shop.model.User;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * 个人资料卡
+ * @date 2014-5-21
+ * @author Stone
+ */
+public class MineInfoActivity extends Activity {
+
+ private TextView tvUsername;
+ private TextView tvSchool;
+ private TextView tvCademy;
+ private TextView tvDorPart;
+ private TextView tvDorNum;
+ private TextView tvPhone;
+ private TextView tvQQ;
+
+ private User curUser = new User();
+
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MessageDef.MINE_INFO_FINISH_FIND_USER:
+ initView();
+ break;
+ default:
+ break;
+ }
+ }
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_info);
+
+ getCurUser();
+ }
+
+ private void initView() {
+ tvUsername = (TextView) findViewById(R.id.tv_mineinfo_username);
+ tvSchool = (TextView) findViewById(R.id.tv_mineinfo_school);
+ tvCademy = (TextView) findViewById(R.id.tv_mineinfo_cademy);
+ tvDorPart = (TextView) findViewById(R.id.tv_mineinfo_dorpart);
+ tvDorNum = (TextView) findViewById(R.id.tv_mineinfo_dornum);
+ tvPhone = (TextView) findViewById(R.id.tv_mineinfo_phone);
+ tvQQ = (TextView) findViewById(R.id.tv_mineinfo_qq);
+
+ tvUsername.setText(curUser.getUsername());
+ tvSchool.setText(curUser.getSchool());
+ tvCademy.setText(curUser.getCademy());
+ tvDorPart.setText(curUser.getDorPart());
+ tvDorNum.setText(curUser.getDorNum());
+ tvPhone.setText(curUser.getPhone());
+ tvQQ.setText(curUser.getQQ());
+
+ }
+
+ private void getCurUser() {
+ BmobUser bmobUser = BmobUser.getCurrentUser(this);
+ BmobQuery query = new BmobQuery();
+ query.addWhereEqualTo("objectId", bmobUser.getObjectId());
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List object) {
+ curUser = object.get(0);
+ Message msg = new Message();
+ msg.what = MessageDef.MINE_INFO_FINISH_FIND_USER;
+ mHandler.sendMessage(msg);
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("亲, 获取当前用户失败");
+ }
+ });
+
+ }
+
+ public void clickEdit(View v) {
+ Intent toEditMineInfo = new Intent(MineInfoActivity.this, MineInfoEditActivity.class);
+// Bundle bundle = new Bundle();
+// bundle.putString("username", curUser.getUsername());
+// bundle.putString("school", curUser.getSchool());
+// bundle.putString("cademy", curUser.getCademy());
+// bundle.putString("dorpart", curUser.getDorPart());
+// bundle.putString("dornum", curUser.getDorNum());
+// bundle.putString("phone", curUser.getPhone());
+// bundle.putString("qq", curUser.getQQ());
+// toEditMineInfo.putExtras(bundle);
+ startActivity(toEditMineInfo);
+ }
+
+ public void clickBack(View v) {
+ finish();
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/MineInfoEditActivity.java b/代码/在这里2.1/src/com/stone/shop/view/MineInfoEditActivity.java
new file mode 100644
index 0000000..39902ea
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/MineInfoEditActivity.java
@@ -0,0 +1,145 @@
+package com.stone.shop.view;
+
+import java.util.List;
+
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.listener.FindListener;
+import cn.bmob.v3.listener.UpdateListener;
+
+import com.stone.date.MessageDef;
+import com.stone.shop.R;
+import com.stone.shop.model.User;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.Toast;
+
+/**
+ * 修改个人资料卡
+ * @date 2014-5-28
+ * @author Stone
+ */
+public class MineInfoEditActivity extends Activity {
+
+ private EditText etUsername;
+ private EditText etSchool;
+ private EditText etCademy;
+ private EditText etDorPart;
+ private EditText etDorNum;
+ private EditText etPhone;
+ private EditText etQQ;
+
+ private User curUser;
+ private Bundle bundle;
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MessageDef.MINE_INFO_FINISH_FIND_USER:
+ initView();
+ break;
+ default:
+ break;
+ }
+ }
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_info_edit);
+
+ setCurUser();
+ }
+
+ private void initView() {
+ etUsername = (EditText) findViewById(R.id.et_mineinfo_username);
+ etSchool = (EditText) findViewById(R.id.et_mineinfo_school);
+ etCademy = (EditText) findViewById(R.id.et_mineinfo_cademy);
+ etDorPart = (EditText) findViewById(R.id.et_mineinfo_dorpart);
+ etDorNum = (EditText) findViewById(R.id.et_mineinfo_dornum);
+ etPhone = (EditText) findViewById(R.id.et_mineinfo_phone);
+ etQQ = (EditText) findViewById(R.id.et_mineinfo_qq);
+
+ etUsername.setText(curUser.getUsername());
+ etSchool.setText(curUser.getSchool());
+ etCademy.setText(curUser.getCademy());
+ etDorPart.setText(curUser.getDorPart());
+ etDorNum.setText(curUser.getDorNum());
+ etPhone.setText(curUser.getPhone());
+ etQQ.setText(curUser.getQQ());
+ }
+
+ private void setCurUser() {
+ BmobUser bmobUser = BmobUser.getCurrentUser(this);
+ BmobQuery query = new BmobQuery();
+ query.addWhereEqualTo("objectId", bmobUser.getObjectId());
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List object) {
+ curUser = object.get(0);
+ //toast("查询到用户 " + object.size());
+ Message msg = new Message();
+ msg.what = MessageDef.MINE_INFO_FINISH_FIND_USER;
+ mHandler.sendMessage(msg);
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("获取当前用户失败");
+ }
+ });
+
+ }
+
+ private void saveUserInfo() {
+ if(curUser == null) {
+ toast("curUser为空");
+ } else {
+ toast("当前用户为 " + curUser.getUsername());
+ }
+ Log.i("当前用户的ID: ", curUser.getObjectId());
+ curUser.setUsername(etUsername.getText().toString());
+ curUser.setSchool(etSchool.getText().toString());
+ curUser.setCademy(etCademy.getText().toString());
+ curUser.setDorPart(etDorPart.getText().toString());
+ curUser.setDorNum(etDorNum.getText().toString());
+ curUser.setPhone(etPhone.getText().toString());
+ curUser.setQQ(etQQ.getText().toString());
+ curUser.update(this, curUser.getObjectId(), new UpdateListener() {
+
+ @Override
+ public void onSuccess() {
+ toast("更新成功");
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ toast("更新失败");
+ }
+ });
+ }
+
+ public void clickSave(View v) {
+ saveUserInfo();
+ finish();
+ }
+
+ public void clickCancel(View v) {
+ finish();
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/MineSoftActivity.java b/代码/在这里2.1/src/com/stone/shop/view/MineSoftActivity.java
new file mode 100644
index 0000000..c1960fd
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/MineSoftActivity.java
@@ -0,0 +1,76 @@
+package com.stone.shop.view;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.MineListAdapter;
+import com.stone.shop.adapter.MineSoftAdapter;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ListView;
+import android.widget.Toast;
+import android.widget.AdapterView.OnItemClickListener;
+
+/**
+ * 软件相关
+ * @date 2014-5-21
+ * @author Stone
+ */
+public class MineSoftActivity extends Activity implements OnItemClickListener{
+
+
+ private String[] softItemNames = {"意见反馈", "检查更新", "使用协议", "关于我们"};
+ private String[] softItemContents = {"", "", "", ""};
+ private ListView lvMineSoft;
+
+ private MineSoftAdapter softListAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_soft);
+
+ initView();
+ }
+
+ private void initView() {
+ lvMineSoft = (ListView) findViewById(R.id.lv_mine_soft);
+ softListAdapter = new MineSoftAdapter(this, softItemNames, softItemContents);
+ lvMineSoft.setAdapter(softListAdapter);
+ lvMineSoft.setOnItemClickListener(this);
+ }
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position,
+ long id) {
+ switch (position) {
+ case 0:
+ Intent toFeedBack = new Intent(MineSoftActivity.this, FeedBackActivity.class);
+ startActivity(toFeedBack);
+ break;
+ case 1:
+ toast("已经是最新版本");
+ break;
+ case 2:
+ break;
+ case 3:
+ Intent toAboutSoft = new Intent(MineSoftActivity.this, AboutActivity.class);
+ startActivity(toAboutSoft);
+ break;
+
+ default:
+ break;
+ }
+
+ }
+
+ public void clickSoftBack(View v) {
+ finish();
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/NewsActivity.java b/代码/在这里2.1/src/com/stone/shop/view/NewsActivity.java
new file mode 100644
index 0000000..2014960
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/NewsActivity.java
@@ -0,0 +1,72 @@
+package com.stone.shop.view;
+
+import com.stone.shop.R;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.widget.TextView;
+
+/**
+ * 新闻内容显示界面
+ * @date 2014-5-8
+ * @author Stone
+ */
+public class NewsActivity extends Activity {
+
+ private static String TAG = "NewsActivity";
+
+ private TextView tvNewsTitle;
+ private TextView tvNewsAuthor;
+ private TextView tvNewsTime;
+ private TextView tvNewsContent;
+
+ private String newsTitle;
+ private String newsAuthor;
+ private String newsTime;
+ private String newsContent;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_news);
+
+ getIntentData();
+ initView();
+ }
+
+ //获取Intent中传入的新闻数据
+ private void getIntentData() {
+ newsTitle = getIntent().getStringExtra("NewsTitle");
+ newsAuthor = getIntent().getStringExtra("NewsAuthor");
+ newsTime = getIntent().getStringExtra("NewsTime");
+ newsContent = getIntent().getStringExtra("NewsContent");
+
+ newsTitle = splitString(newsTitle); //拆分字符串, 将新闻标题设置为 "】" 后面的内容
+ }
+
+ private String splitString(String str) {
+ String[] strs = null;
+ if(str.equals("")){
+ return "";
+ } else if ( !(str.contains("【") || str.contains("】")) ) {
+ return str;
+ }
+ strs = str.split("】");
+ return strs[1];
+ }
+
+ private void initView() {
+ tvNewsTitle = (TextView) findViewById(R.id.tv_news_title);
+ tvNewsAuthor = (TextView) findViewById(R.id.tv_news_author);
+ tvNewsTime = (TextView) findViewById(R.id.tv_news_time);
+ tvNewsContent = (TextView) findViewById(R.id.tv_news_content);
+
+ tvNewsTitle.setText(newsTitle);
+ tvNewsAuthor.setText("作者: "+newsAuthor);
+ tvNewsTime.setText("发布日期 : "+newsTime);
+ tvNewsContent.setText(newsContent);
+ }
+
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/OrderActivity.java b/代码/在这里2.1/src/com/stone/shop/view/OrderActivity.java
new file mode 100644
index 0000000..fcdf913
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/OrderActivity.java
@@ -0,0 +1,218 @@
+package com.stone.shop.view;
+
+import java.util.Calendar;
+
+import android.app.Activity;
+import android.app.TimePickerDialog;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.TimePicker;
+import android.widget.Toast;
+
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.listener.SaveListener;
+
+import com.stone.shop.R;
+import com.stone.shop.model.Good;
+import com.stone.shop.model.Order;
+import com.stone.shop.model.Shop;
+import com.stone.ui.DialogOrder;
+import com.stone.util.Util;
+
+/**
+ * 应用主界面
+ *
+ * @date 2014-5-13
+ * @author Stone
+ */
+public class OrderActivity extends Activity implements OnClickListener {
+
+ private TextView tvOrderShop; // 店名
+ private TextView tvOrderGood; // 菜名
+ private TextView tvOrderCount; // 数量
+ private TextView tvOrderTime; // 取餐时间
+ private TimePicker tpOrderTime; // 时间选择控件
+ private EditText etOrderPhone; // 联系电话
+ private EditText etOrderWords; // 附加留言
+ private Button btnOrderCountMore; // 增加数量
+ private Button btnOrderCountLess; // 减少数量
+
+ private Button btnOrderSetTime; // 设置时间
+ private Button btnDlgOk; // 设置时间完成
+ private Button btnOrderSubmit; // 提交订单
+
+ // private DialogOrder dlgSetOrderTime;
+ // private View dlgOrderView;
+ private int mHour;
+ private int mMinute;
+ private String time = "12 : 30";
+ private TimePickerDialog dlgSetOrderTime;
+ private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
+
+ public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+ mHour = hourOfDay;
+ mMinute = minute;
+ updateDisplay();
+ }
+ };
+
+ // 从上级页面中传入的数据
+ private Shop shop; // 当期选择的Shop
+ private Good good; // 当前选择的商品
+ private String shopID; // 当前选择的Shop的ID
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_order);
+
+ shop = (Shop) getIntent().getSerializableExtra("shop");
+ good = (Good) getIntent().getSerializableExtra("good");
+ shopID = getIntent().getStringExtra("shopID");
+
+ initView();
+ // initDlgView();
+ }
+
+ private void initView() {
+
+ tvOrderShop = (TextView) findViewById(R.id.tv_order_shop);
+ tvOrderGood = (TextView) findViewById(R.id.tv_order_good);
+ tvOrderCount = (TextView) findViewById(R.id.tv_order_count);
+ tvOrderTime = (TextView) findViewById(R.id.tv_order_time);
+ tvOrderShop.setText(shop.getName());
+ tvOrderGood.setText(good.getName());
+
+ etOrderPhone = (EditText) findViewById(R.id.et_order_phone);
+ etOrderWords = (EditText) findViewById(R.id.et_order_words);
+
+ btnOrderCountMore = (Button) findViewById(R.id.btn_order_count_more);
+ btnOrderCountLess = (Button) findViewById(R.id.btn_order_count_less);
+ btnOrderSetTime = (Button) findViewById(R.id.btn_set_time);
+ btnOrderSubmit = (Button) findViewById(R.id.btn_order_submit);
+ btnOrderCountMore.setOnClickListener(this);
+ btnOrderCountLess.setOnClickListener(this);
+ btnOrderSetTime.setOnClickListener(this);
+ btnOrderSubmit.setOnClickListener(this);
+
+ }
+
+ // private void initDlgView() {
+ // LayoutInflater inflater = LayoutInflater.from(this);
+ // dlgOrderView = inflater.inflate(R.layout.dlg_order_settime, null);
+ // tpOrderTime = (TimePicker) dlgOrderView.findViewById(R.id.tp_dlg_time);
+ // tpOrderTime.setIs24HourView(true);
+ // btnDlgOk = (Button) dlgOrderView.findViewById(R.id.btn_dlg_ok);
+ // btnDlgOk.setOnClickListener(this);
+ // }
+
+ @Override
+ public void onClick(View v) {
+ int count = 1;
+ switch (v.getId()) {
+ case R.id.btn_order_count_more:
+ count = Integer.parseInt(tvOrderCount.getText().toString());
+ if (count == 4) {
+ toast("每份订单数量不能超过 4");
+ } else {
+ tvOrderCount.setText((count + 1) + "");
+ }
+ break;
+ case R.id.btn_order_count_less:
+ count = Integer.parseInt(tvOrderCount.getText().toString());
+ if (count == 1) {
+ toast("每份订单数量至少为 1 ");
+ } else {
+ tvOrderCount.setText((count - 1) + "");
+ }
+ break;
+ case R.id.btn_set_time:
+ // dlgSetOrderTime = new DialogOrder(this, R.style.MyDialog);
+ // dlgSetOrderTime.show();
+ final Calendar c = Calendar.getInstance();
+ mHour = c.get(Calendar.HOUR_OF_DAY);
+ mMinute = c.get(Calendar.MINUTE);
+ dlgSetOrderTime = new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, true);
+ dlgSetOrderTime.show();
+ break;
+ case R.id.btn_dlg_ok:
+ time = tpOrderTime.getCurrentHour() + " : " + tpOrderTime.getCurrentMinute();
+ dlgSetOrderTime.dismiss();
+ case R.id.btn_order_submit:
+ // toast("小菜订单提交成功");
+ postOrder();
+ finish();
+ // back();
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ /**
+ * 提交订单数据
+ */
+ private void postOrder() {
+ String count = tvOrderCount.getText().toString();
+ String phone = etOrderPhone.getText().toString();
+ String words = etOrderWords.getText().toString();
+ float price = Integer.parseInt(count) * Float.parseFloat(good.getPrice());
+ if (!Util.isPhoneNumberValid(phone)) {
+ toast("请输入正确的联系电话, 方便取餐");
+ } else {
+ Order order = new Order();
+ BmobUser user = BmobUser.getCurrentUser(this);
+ order.setUserName(user.getUsername());
+ order.setGoodID(good.getObjectId());
+ order.setGoodName(good.getName());
+ order.setShopID(shop.getObjectId());
+ order.setShopName(shop.getName());
+ order.setCount(count);
+ order.setTime(time);
+ order.setPrice(price + "");
+ order.setPhone(phone);
+ order.setTips(words);
+ order.save(this, new SaveListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ toast("订单提交成功");
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast("订单提交失败");
+ }
+ });
+
+ }
+ }
+
+ private void updateDisplay() {
+ time = mHour + " : " + mMinute;
+ tvOrderTime.setText(time);
+ }
+
+ private void back() {
+ Intent back = new Intent(OrderActivity.this, ShopItemActivity.class);
+ Bundle bundle = new Bundle();
+ bundle.putSerializable("shop", shop);
+ bundle.putString("shopID", shopID); // 商铺的ID需要单独传递,否则获取到的是null
+ back.putExtras(bundle);
+ startActivity(back);
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/OrderInfoActivity.java b/代码/在这里2.1/src/com/stone/shop/view/OrderInfoActivity.java
new file mode 100644
index 0000000..e3c3d26
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/OrderInfoActivity.java
@@ -0,0 +1,116 @@
+package com.stone.shop.view;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.ListView;
+import android.widget.PopupMenu;
+import android.widget.Toast;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.listener.FindListener;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.OrderInfoListAdapter;
+import com.stone.shop.model.Order;
+
+/**
+ * 订单详情页面
+ *
+ * @date 2014-5-27
+ * @author Stone
+ */
+public class OrderInfoActivity extends Activity implements OnItemLongClickListener{
+
+ private static final String TAG = "OrderInfoActivity";
+
+ private ListView lvOrderInfo;
+ private OrderInfoListAdapter orderInfoListAdapter;
+ private List orderList = new ArrayList();
+
+ private String type = ""; // now-当前订单 old-历史订单
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_order_info);
+
+ type = getIntent().getStringExtra("type");
+
+ initData();
+ initView();
+ }
+
+ private void initView() {
+ lvOrderInfo = (ListView) findViewById(R.id.lv_order_info);
+ orderInfoListAdapter = new OrderInfoListAdapter(this, orderList);
+ lvOrderInfo.setAdapter(orderInfoListAdapter);
+ lvOrderInfo.setOnItemLongClickListener(this);
+ }
+
+ // 初始化列表菜单中数据
+ public void initData() {
+ // 获取用户
+ BmobUser user = BmobUser.getCurrentUser(this);
+
+ // 获取小菜订单(数量)
+ BmobQuery query = new BmobQuery();
+ query.order("-updatedAt");
+ query.addWhereEqualTo("userName", user.getUsername());
+ if(type.equals("now")) {
+ query.addWhereEqualTo("state", "未取餐");
+ } else if(type.equals("old")) {
+ query.addWhereEqualTo("state", "已取餐");
+ } else {
+ // do nothing
+ }
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List object) {
+ if (object.size() == 0)
+ toast("您还没有订单");
+ orderList = object;
+ // 通知Adapter数据更新
+ orderInfoListAdapter.refresh(orderList);
+ orderInfoListAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("查询失败");
+ }
+ });
+
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+ //订单长按响应事件
+ @Override
+ public boolean onItemLongClick(AdapterView> parent, View view,
+ int position, long id) {
+ PopupMenu popup = new PopupMenu(this, lvOrderInfo);
+ popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu());
+
+ popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ Toast.makeText(OrderInfoActivity.this, "Clicked popup menu item " + item.getTitle(),
+ Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ });
+
+ popup.show();
+ return false;
+ };
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/RegisterActivity.java b/代码/在这里2.1/src/com/stone/shop/view/RegisterActivity.java
new file mode 100644
index 0000000..f57ac81
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/RegisterActivity.java
@@ -0,0 +1,108 @@
+package com.stone.shop.view;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.stone.shop.R;
+import com.stone.shop.model.User;
+import com.stone.util.Util;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+import cn.bmob.v3.listener.SaveListener;
+
+/**
+ * 注册界面
+ *
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class RegisterActivity extends Activity implements OnClickListener {
+
+ private static final String TAG = "RegisterActivity";
+
+ private Button btnReg;
+ private EditText etUsername;
+ private EditText etPassword;
+ private EditText etComfirmPsd;
+ private EditText etPhone;
+
+ private String username = null;
+ private String password = null;
+ private String comfirmPsd = null;
+ private String phone = null;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_reg);
+
+ etUsername = (EditText) findViewById(R.id.et_username);
+ etPassword = (EditText) findViewById(R.id.et_password);
+ etComfirmPsd = (EditText) findViewById(R.id.et_comfirm_psd);
+ etPhone = (EditText) findViewById(R.id.et_phone);
+
+ btnReg = (Button) findViewById(R.id.btn_reg_now);
+ btnReg.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btn_reg_now:
+ username = etUsername.getText().toString();
+ password = etPassword.getText().toString();
+ comfirmPsd = etComfirmPsd.getText().toString();
+ phone = etPhone.getText().toString();
+ if (!Util.isNetworkConnected(this)) {
+ toast("木有网络 ( ⊙ o ⊙ ) ");
+ } else if (username.equals("") || password.equals("") || comfirmPsd.equals("") || phone.equals("")) {
+ toast("不填完整不能拿到身份证, ~~~~(>_<)~~~~ ");
+ } else if (!comfirmPsd.equals(password)) {
+ toast("两次密码输入不一致");
+ } else if (!Util.isPhoneNumberValid(phone)) {
+ toast("请输入正确的手机号码");
+ } else {
+ // 开始提交注册信息
+ User bu = new User();
+ bu.setUsername(username);
+ bu.setPassword(password);
+ bu.setPhone(phone);
+ bu.signUp(this, new SaveListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ toast("拿到身份证了,快登陆吧");
+ Intent backLogin = new Intent(RegisterActivity.this, LoginActivity.class);
+ startActivity(backLogin);
+ RegisterActivity.this.finish();
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast("该名字已被人使用,换个名字吧.");
+ }
+ }
+
+ );
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ public void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ };
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/ReservationActivity.java b/代码/在这里2.1/src/com/stone/shop/view/ReservationActivity.java
new file mode 100644
index 0000000..90bf398
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/ReservationActivity.java
@@ -0,0 +1,138 @@
+package com.stone.shop.view;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import com.stone.shop.R;
+import com.stone.shop.model.Reservation;
+import com.stone.shop.model.User;
+import com.stone.ui.DateTimePickDialogUtil;
+import com.stone.ui.DateTimePickDialogUtil.DateTimeListener;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.listener.DeleteListener;
+import cn.bmob.v3.listener.FindListener;
+import cn.bmob.v3.listener.SaveListener;
+
+public class ReservationActivity extends Activity {
+
+ private Button btn_login;
+ private SimpleDateFormat dateFormat;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.layout_reservation);
+
+ TextView tv_title = (TextView) findViewById(R.id.tv_title);
+ tv_title.setText("教室预定");
+
+ final String roomId = getIntent().getStringExtra("roomId");
+ final String roomName = getIntent().getStringExtra("roomName");
+
+ TextView tv_room = (TextView) findViewById(R.id.tv_room);
+ tv_room.setText("教室:" + roomName);
+
+ btn_login = (Button) findViewById(R.id.btn_login);
+
+ dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
+
+ // 查找Person表里面id为6b6c11c537的数据
+ BmobQuery bmobQuery = new BmobQuery();
+ bmobQuery.addWhereEqualTo("userId", User.userId);
+ bmobQuery.addWhereEqualTo("roomId", roomId);
+ bmobQuery.findObjects(ReservationActivity.this, new FindListener() {
+
+ @Override
+ public void onSuccess(List newsList) {
+ // toast("查询商品成功, 共" + newsList.size());
+ if (newsList.size() != 0) {
+
+ String dateTime = newsList.get(0).getDateTime();
+
+ try {
+ if (dateFormat.parse(dateTime).before(new Date())) {
+
+ Reservation gameScore = new Reservation();
+ gameScore.setObjectId(newsList.get(0).getObjectId());
+ gameScore.delete(ReservationActivity.this);
+
+ } else {
+ btn_login.setEnabled(false);
+ btn_login.setText("已经预定" + (TextUtils.isEmpty(dateTime) ? "" : (" " + dateTime)));
+ }
+ } catch (ParseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("查询失败");
+ }
+ });
+
+ btn_login.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+
+ DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(ReservationActivity.this,
+ dateFormat.format(new Date()));
+ dateTimePicKDialog.dateTimePicKDialog(new DateTimeListener() {
+
+ @Override
+ public void onDateTimeChane(final String dateTime) {
+ // TODO Auto-generated method stub
+
+ Reservation reservation = new Reservation();
+ reservation.setRoomId(roomId);
+ reservation.setRoomName(roomName);
+ reservation.setUserId(User.userId);
+ reservation.setDateTime(dateTime);
+
+ reservation.save(ReservationActivity.this, new SaveListener() {
+
+ @Override
+ public void onSuccess() {
+ // TODO Auto-generated method stub
+ toast("预定成功");
+ btn_login.setEnabled(false);
+ btn_login.setText("已经预定 " + dateTime);
+
+ }
+
+ @Override
+ public void onFailure(int arg0, String arg1) {
+ // TODO Auto-generated method stub
+ toast("预定失败");
+
+ }
+ });
+ }
+ });
+
+ }
+ });
+
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/ShopActivity.java b/代码/在这里2.1/src/com/stone/shop/view/ShopActivity.java
new file mode 100644
index 0000000..6270cf9
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/ShopActivity.java
@@ -0,0 +1,129 @@
+package com.stone.shop.view;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.GridAdapter;
+import com.stone.ui.MyGridView;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.GridView;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * 商品主界面
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class ShopActivity extends Activity implements OnItemClickListener{
+
+ private static final String TAG = "ShopActivity" ;
+
+ private MyGridView gvSchoolClass; //学习小菜
+ private MyGridView gvFoodClass; //吃饭小菜
+ private MyGridView gvGiftClass; //购物小菜
+ private MyGridView gvOutClass; //疯狂小菜
+
+ //private ImageView imgLoc;
+ //private ImageView imgSearch;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // TODO Auto-generated method stub
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_shop);
+
+ initView();
+ }
+
+ /**
+ * 初始化组件并适配数据
+ */
+ public void initView() {
+ gvFoodClass = (MyGridView) findViewById(R.id.gv_food_class);
+ gvGiftClass = (MyGridView) findViewById(R.id.gv_gift_class);
+ gvOutClass = (MyGridView) findViewById(R.id.gv_out_class);
+ gvSchoolClass = (MyGridView) findViewById(R.id.gv_school_class);
+
+ gvFoodClass.setAdapter(new GridAdapter(this, 0));
+ gvFoodClass.setOnItemClickListener(this);
+
+ gvGiftClass.setAdapter(new GridAdapter(this, 1));
+ gvGiftClass.setOnItemClickListener(this);
+
+ gvOutClass.setAdapter(new GridAdapter(this, 2));
+ gvOutClass.setOnItemClickListener(this);
+
+ gvSchoolClass.setAdapter(new GridAdapter(this, 3));
+ gvSchoolClass.setOnItemClickListener(this);
+
+ }
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position,
+ long id) {
+ Log.i("GridView点击了: ", "position"+position);
+ //toast("点击了: " + position);
+ switch (parent.getId()) {
+
+ //点击 学习小菜 中的子项(1代表第一个GridView, (position+1)代表GridView中第几个元素)
+ case R.id.gv_school_class:
+ //教学类的做特别处理
+ if(position==0) {
+ Intent toBXTActivity = new Intent(ShopActivity.this, ClassroomActivity.class);
+ startActivity(toBXTActivity);
+ } else {
+ toShopAllActivity( GridAdapter.mSchoolTexts[position], "1"+(position+1) );
+ }
+
+ break;
+ //点击 吃饭小菜 中的子项
+ case R.id.gv_food_class:
+ toShopAllActivity( GridAdapter.mFoodTexts[position], "2"+(position+1) );
+ break;
+ //点击 购物小菜 中的子项
+ case R.id.gv_gift_class:
+ if(position==0) {
+ Intent toBXTActivity = new Intent(ShopActivity.this, BXTActivity.class);
+ startActivity(toBXTActivity);
+ } else {
+ toShopAllActivity( GridAdapter.mGiftTexts[position], "3"+(position+1) );
+ }
+ break;
+ //点击 疯狂小菜 中的子项
+ case R.id.gv_out_class:
+ toShopAllActivity( GridAdapter.mOutTexts[position], "4"+(position+1) );
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ };
+
+ /**
+ *
+ * @param title 父分类标题
+ * @param type
+ */
+ private void toShopAllActivity(String title, String type) {
+ Intent toShopAll = new Intent(ShopActivity.this, ShopAllActivity.class);
+ toShopAll.putExtra("title", title);
+ //当前点击的项的父分类
+ toShopAll.putExtra("type", type);
+ startActivity(toShopAll);
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/ShopAllActivity.java b/代码/在这里2.1/src/com/stone/shop/view/ShopAllActivity.java
new file mode 100644
index 0000000..9dc775b
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/ShopAllActivity.java
@@ -0,0 +1,120 @@
+package com.stone.shop.view;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.listener.FindListener;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.ShopListAdapter;
+import com.stone.shop.model.Shop;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+import android.widget.AdapterView.OnItemClickListener;
+
+/**
+ * 某一分类下的所有店铺页面
+ * @author Stone
+ * @date 2014-4-26
+ */
+public class ShopAllActivity extends Activity implements OnItemClickListener{
+
+ private static final String TAG = "ShopAllActivity" ;
+
+ private TextView tvTitle;
+ private ListView lvShopAllList;
+ private ShopListAdapter shopListAdapter;
+
+ //记录从ShopActivity中传过来的当前点击项的类型
+ private String type;
+ private List shopList = new ArrayList();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // TODO Auto-generated method stub
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_shop_all);
+
+ //得到从上级Activity中传入的Type数据
+ type = getIntent().getStringExtra("type");
+
+ //获取商店数据
+ getShopsDate();
+
+ initView();
+
+ }
+
+ public void initView() {
+ //设置标题
+ tvTitle = (TextView) findViewById(R.id.tv_title);
+ tvTitle.setText(getIntent().getStringExtra("title"));
+
+ lvShopAllList = (ListView) findViewById(R.id.lv_shop_all);
+ shopListAdapter = new ShopListAdapter(this, (ArrayList) shopList, type);
+ lvShopAllList.setAdapter(shopListAdapter);
+ lvShopAllList.setOnItemClickListener(this);
+
+ }
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position,
+ long id) {
+ //toast("点击了: " + position);
+ //将当前点击的Shop对象传递给下一个Activity
+ Intent toShopItem = new Intent(ShopAllActivity.this, ShopItemActivity.class);
+ Bundle bundle = new Bundle();
+ bundle.putSerializable("shop", shopList.get(position) );
+ bundle.putString("shopID", shopList.get(position).getObjectId()); //商铺的ID需要单独传递,否则获取到的是null
+ Log.i(TAG, ">>发出>>" + "shopID: "+shopList.get(position).getObjectId()+" shopName: "+shopList.get(position).getName());
+ toShopItem.putExtras(bundle);
+ startActivity(toShopItem);
+ }
+
+ /**
+ * 加载当前分类的所有店铺到ListView中
+ */
+ private void getShopsDate() {
+ BmobQuery query = new BmobQuery();
+ query.order("-updatedAt");
+ Shop shop = new Shop();
+ shop.setType(type);
+ query.addWhereEqualTo("type", shop.getType()); // 查询当前类型的所有店铺
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List object) {
+ //toast("查询成功. 共计" + object.size());
+ if(object.size()==0)
+ toast("还没开张, 耐心等待吧");
+ shopList = object;
+ // 通知Adapter数据更新
+ shopListAdapter.refresh((ArrayList) shopList);
+ shopListAdapter.notifyDataSetChanged();
+
+ }
+
+ @Override
+ public void onError(int arg0, String msg) {
+ toast("查询失败:"+msg);
+ }
+
+ });
+ }
+
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ };
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/ShopItemActivity.java b/代码/在这里2.1/src/com/stone/shop/view/ShopItemActivity.java
new file mode 100644
index 0000000..2aaa72e
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/ShopItemActivity.java
@@ -0,0 +1,313 @@
+package com.stone.shop.view;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.v4.view.PagerTabStrip;
+import android.support.v4.view.PagerTitleStrip;
+import android.support.v4.view.ViewPager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.BmobQuery.CachePolicy;
+import cn.bmob.v3.listener.FindListener;
+
+import com.stone.shop.R;
+import com.stone.shop.adapter.GoodsListAdapter;
+import com.stone.shop.adapter.ViewPagerAdapter;
+import com.stone.shop.model.Good;
+import com.stone.shop.model.Shop;
+import com.stone.ui.ViewPagerCompat;
+
+public class ShopItemActivity extends Activity implements OnClickListener, OnItemClickListener{
+
+ private static final String TAG = "ShopItemActivity";
+
+ // ViewPager页
+ private View view1, view2; // 需要滑动的页卡
+ private ViewPagerCompat viewPager; // viewpager
+ private ViewPagerAdapter shopViewPagerAdapter;
+ private PagerTitleStrip pagerTitleStrip; // viewpager的标题
+ private PagerTabStrip pagerTabStrip; // 一个viewpager的指示器,效果就是一个横的粗的下划线
+ private List viewList; // 把需要滑动的页卡添加到这个list中
+ private List titleList; // viewpager的标题
+
+ // 店铺商品列表
+ private ListView lvGoodsList;
+ private GoodsListAdapter goodsListAdapter;
+ private Button btnBuyGood;
+
+ // 店铺简介页中的控件
+ private TextView tvShopName; // 店铺名
+ private TextView tvShopInfo; // 店铺简介
+ private TextView tvShopSale; // 店铺促销信息
+ private TextView tvShopLoc; // 店铺地理位置
+ private TextView tvShopPhone; // 店铺电话
+ private Button btnCommit;
+ private EditText etCommit;
+ private LinearLayout llCommitParent; // 评论父线性布局
+ private LinearLayout llCommitSon; // 评论子线性布局
+ private ImageView imgCall; // 拨打电话
+
+ // UI测试数据
+ private static List goodsList;
+
+ // 从上级页面中传入的数据
+ private Shop shop; // 当期选择的Shop
+ private Good selectGood;
+ private String shopID; // 当前选择的Shop的ID
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_shop_item);
+
+ // 获取到从ShopAllActivity中传递过来的Shop对象
+ shop = (Shop) getIntent().getSerializableExtra("shop");
+ shopID = getIntent().getStringExtra("shopID");
+ Log.i(TAG, "<<收到<<" + "shopID: " + shop.getObjectId() + " shopName: "
+ + shop.getName());
+ Log.i(TAG,
+ "<<收到<<" + "shopID: " + shopID + " shopName: " + shop.getName());
+
+ // 初始化商品页面以及适配数据
+ initGoodsDate();
+ initView();
+
+
+ }
+
+ public void initView() {
+
+ viewPager = (ViewPagerCompat) findViewById(R.id.viewpager);
+ pagerTabStrip = (PagerTabStrip) findViewById(R.id.pagertab);
+ pagerTabStrip.setTabIndicatorColor(Color.argb(255, 255, 127, 39));
+ pagerTabStrip.setDrawFullUnderline(false);
+ pagerTabStrip.setTextSpacing(50);
+ pagerTabStrip.setTextColor(Color.argb(255, 255, 127, 39));
+
+ view1 = LayoutInflater.from(this)
+ .inflate(R.layout.viewpager_menu, null);
+ view2 = LayoutInflater.from(this).inflate(R.layout.viewpager_shopinfo,
+ null);
+
+ initContentView();
+
+ viewList = new ArrayList();// 将要分页显示的View装入数组中
+ viewList.add(view1);
+ viewList.add(view2);
+
+ titleList = new ArrayList();// 每个页面的Title数据
+ titleList.add("商品");
+ titleList.add("店铺简介");
+ shopViewPagerAdapter = new ViewPagerAdapter(viewList, titleList);
+
+ viewPager.setAdapter(shopViewPagerAdapter);
+ viewPager.setCurrentItem(0);
+
+ }
+
+ /**
+ * 获取某一商店的所有商品
+ *
+ * @date 2014-5-1
+ * @autor Stone
+ */
+ public void initGoodsDate() {
+ goodsList = new ArrayList();
+ goodsListAdapter = new GoodsListAdapter(this, goodsList);
+ BmobQuery query = new BmobQuery();
+ query.addWhereEqualTo("shopID", shopID);
+ query.setCachePolicy(CachePolicy.CACHE_ELSE_NETWORK); //
+ // 先从缓存取数据,如果没有,再从网络取。
+ query.setLimit(15); // 限制最多15个结果
+ query.findObjects(this, new FindListener() {
+
+ @Override
+ public void onSuccess(List goods) {
+ // toast("查询商品成功, 共" + goods.size());
+ if (goods.size() == 0) {
+ toast("该店还没有添加商品");
+ }
+ goodsList = goods;
+ goodsListAdapter.refresh(goodsList);
+ goodsListAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("查询失败");
+ }
+ });
+
+ }
+
+ public void initContentView() {
+ // 商品列表页
+ lvGoodsList = (ListView) view1.findViewById(R.id.lv_goods_list);
+ lvGoodsList.setAdapter(goodsListAdapter);
+ lvGoodsList.setOnItemClickListener(this);
+
+ // 店铺简介页
+ tvShopName = (TextView) view2.findViewById(R.id.tv_shop_title);
+ tvShopInfo = (TextView) view2.findViewById(R.id.tv_shop_introduce);
+ tvShopSale = (TextView) view2.findViewById(R.id.tv_shop_promotion);
+ tvShopLoc = (TextView) view2.findViewById(R.id.tv_shop_location);
+ tvShopPhone = (TextView) view2.findViewById(R.id.tv_shop_phone);
+ tvShopName.setText(shop.getName()); // 设置店铺名
+ tvShopInfo.setText(shop.getInfo()); // 设置店铺简介
+ tvShopSale.setText(shop.getSale()); // 设置店铺公告
+ tvShopLoc.setText("位置:" + "二食堂二楼"); // 设置店铺位置
+ tvShopPhone.setText("电话:" + shop.getPhone()); // 设置店铺联系电话
+
+ btnCommit = (Button) view2.findViewById(R.id.btn_commit);
+ btnCommit.setOnClickListener(this);
+
+ // 获取到评论的布局
+ etCommit = (EditText) view2.findViewById(R.id.et_commit);
+ llCommitParent = (LinearLayout) view2
+ .findViewById(R.id.ll_commit_parent_view);
+ llCommitSon = (LinearLayout) findViewById(R.id.ll_commit_son_view);
+
+ imgCall = (ImageView) view2.findViewById(R.id.img_call);
+ imgCall.setOnClickListener(this);
+
+ }
+
+ /**
+ * 添加一条评论
+ *
+ * @param user
+ * @param content
+ */
+ public void insertCommit(String user, String content) {
+ View view = LayoutInflater.from(this).inflate(R.layout.commit, null);
+ TextView tvUser = (TextView) view.findViewById(R.id.tv_commit_user);
+ TextView tvContent = (TextView) view
+ .findViewById(R.id.tv_commit_content);
+ tvUser.setText(user);
+ tvContent.setText(content);
+ llCommitParent.addView(view);
+ tvUser = null;
+ tvContent = null;
+ }
+
+// public void clickBuyGood(View v) {
+// Intent toOrderActivity = new Intent(ShopItemActivity.this, OrderActivity.class);
+// Bundle bundle = new Bundle();
+// bundle.putSerializable("shop", shop );
+// bundle.putString("shopID", shopID); //商铺的ID需要单独传递,否则获取到的是null
+// toOrderActivity.putExtras(bundle);
+// startActivity(toOrderActivity);
+// //-------------------------------------------------------------------
+// toast("亲, 记得在弹出的对话框中选择数量哦");
+// Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
+// lvGoodsList.startAnimation(shake);
+//
+// // 显示订单对话框
+// orderDlg = new DialogOrder(this, R.style.MyDialog);
+// orderDlg.show();
+// // 得到订单对话框的View
+// LayoutInflater factory = LayoutInflater.from(this);
+// dlgOrderView = factory.inflate(R.layout.dlg_order, null);
+// tvOrderCount = (TextView) dlgOrderView
+// .findViewById(R.id.tv_order_count);
+// etOrderPhone = (EditText) dlgOrderView
+// .findViewById(R.id.et_order_phone);
+// etOrderWords = (EditText) dlgOrderView
+// .findViewById(R.id.et_order_phone);
+// ;
+// btnOrderCount = (Button) dlgOrderView
+// .findViewById(R.id.btn_order_count);
+// btnOrderSubmit = (Button) dlgOrderView
+// .findViewById(R.id.btn_order_submit);
+// btnOrderCount.setOnClickListener(this);
+// btnOrderSubmit.setOnClickListener(this);
+// //-------------------------------------------------------------------
+// }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btn_commit:
+ if (etCommit.getText().toString().equals("")) {
+ toast("亲,先写一句吧");
+ } else {
+ SimpleDateFormat formatter = new SimpleDateFormat(
+ "yyyy年MM月dd日 HH:mm:ss ");
+ Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
+ String time = formatter.format(curDate);
+ String content = etCommit.getText().toString() + " [ " + time
+ + " ] ";
+ insertCommit("admin" + ":", content);
+ etCommit.setText("");
+ }
+ break;
+
+ case R.id.img_call:
+ toast("店主没有留下电话");
+ break;
+
+ default:
+ break;
+ }
+
+ }
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position,
+ long id) {
+ switch (viewPager.getCurrentItem()) {
+ case 0:
+ toast("选择的商品名称: " + goodsList.get(position).getName());
+ selectGood = goodsList.get(position);
+ toast("点击了购买按钮");
+ Intent toOrderActivity = new Intent(ShopItemActivity.this, OrderActivity.class);
+ Bundle bundle = new Bundle();
+ bundle.putSerializable("shop", shop );
+ bundle.putSerializable("good", selectGood);
+ bundle.putString("shopID", shopID); //商铺的ID需要单独传递,否则获取到的是null
+ toOrderActivity.putExtras(bundle);
+ startActivity(toOrderActivity);
+ //toast("点击了Position " + position);
+// if(view.getId() == R.id.btn_buy_good) {
+// toast("点击了购买按钮");
+// Intent toOrderActivity = new Intent(ShopItemActivity.this, OrderActivity.class);
+// Bundle bundle = new Bundle();
+// bundle.putSerializable("shop", shop );
+// bundle.putSerializable("good", selectGood);
+// bundle.putString("shopID", shopID); //商铺的ID需要单独传递,否则获取到的是null
+// toOrderActivity.putExtras(bundle);
+// startActivity(toOrderActivity);
+// }
+ break;
+ case 1:
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ public void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/SplashActivity.java b/代码/在这里2.1/src/com/stone/shop/view/SplashActivity.java
new file mode 100644
index 0000000..5292f3d
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/SplashActivity.java
@@ -0,0 +1,75 @@
+package com.stone.shop.view;
+
+import com.stone.shop.R;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationSet;
+import android.view.animation.RotateAnimation;
+import android.view.animation.ScaleAnimation;
+import android.widget.RelativeLayout;
+
+public class SplashActivity extends Activity {
+ private RelativeLayout rlSplash;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ initView();
+ initAnimation();
+ }
+
+ private void initView() {
+ setContentView(R.layout.activity_splash);
+ rlSplash = (RelativeLayout) findViewById(R.id.rl_splash);
+ }
+
+ private void initAnimation() {
+ AnimationSet set = new AnimationSet(false);
+ RotateAnimation rtAnimation = new RotateAnimation(0, 360,
+ Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
+ 0.5f);
+ rtAnimation.setDuration(2000);
+ rtAnimation.setFillAfter(true);
+
+ ScaleAnimation scAnimation = new ScaleAnimation(0, 1, 0, 1,
+ Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
+ 0.5f);
+ scAnimation.setDuration(2000);
+ scAnimation.setFillAfter(true);
+
+ AlphaAnimation alAnimation = new AlphaAnimation(0, 1);
+ alAnimation.setDuration(2000);
+ alAnimation.setFillAfter(true);
+
+ set.addAnimation(rtAnimation);
+ set.addAnimation(scAnimation);
+ set.addAnimation(alAnimation);
+
+ set.setAnimationListener(new AnimationListener() {
+
+ @Override
+ public void onAnimationStart(Animation arg0) {
+
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation arg0) {
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animation arg0) {
+ startActivity(new Intent(SplashActivity.this,
+ LoginActivity.class));
+ finish();
+ }
+ });
+
+ rlSplash.startAnimation(set);
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/UserInfoActivity.java b/代码/在这里2.1/src/com/stone/shop/view/UserInfoActivity.java
new file mode 100644
index 0000000..738b792
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/UserInfoActivity.java
@@ -0,0 +1,20 @@
+package com.stone.shop.view;
+
+import com.stone.shop.R;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * @date 2014-5-19
+ * @author Stone
+ */
+public class UserInfoActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_userinfo);
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/WsqActivity.java b/代码/在这里2.1/src/com/stone/shop/view/WsqActivity.java
new file mode 100644
index 0000000..0b1947e
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/WsqActivity.java
@@ -0,0 +1,60 @@
+package com.stone.shop.view;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Toast;
+
+import com.stone.shop.R;
+
+/**
+ * 购物车主界面
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class WsqActivity extends Activity {
+
+ private static final String TAG = "CarActivity";
+
+ private static final String URL_WSQ = "http://wx.wsq.qq.com/231782938";
+ private WebView wsqWebView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // TODO Auto-generated method stub
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_car);
+
+ wsqWebView = (WebView) findViewById(R.id.wv_wsq);
+
+ // -----------------------------------------------------------------
+
+ wsqWebView.getSettings().setJavaScriptEnabled(true); // 设置使用够执行JS脚本
+ //wsqWebView.getSettings().setBuiltInZoomControls(true); // 设置使支持缩放
+ wsqWebView.getSettings().setDefaultFontSize(12);
+ wsqWebView.setWebChromeClient(new WebChromeClient());
+ wsqWebView.setWebViewClient(new WebViewClient() {
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view,
+ String url) {
+ view.loadUrl(url);// 使用当前WebView处理跳转
+ return true;// true表示此事件在此处被处理,不需要再广播
+ }
+
+ @Override
+ // 转向错误时的处理
+ public void onReceivedError(WebView view, int errorCode,
+ String description, String failingUrl) {
+ Toast.makeText(WsqActivity.this,
+ "Oh no! " + description, Toast.LENGTH_SHORT)
+ .show();
+ }
+ });
+ wsqWebView.loadUrl(URL_WSQ);
+ // ------------------------------------------------
+
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/old/OldAboutActivity.java b/代码/在这里2.1/src/com/stone/shop/view/old/OldAboutActivity.java
new file mode 100644
index 0000000..64cd483
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/old/OldAboutActivity.java
@@ -0,0 +1,21 @@
+package com.stone.shop.view.old;
+
+import com.stone.shop.R;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * 关于软件
+ * @author Stone
+ */
+public class OldAboutActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_about);
+ }
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/shop/view/old/OldMineActivity.java b/代码/在这里2.1/src/com/stone/shop/view/old/OldMineActivity.java
new file mode 100644
index 0000000..a8886c8
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/shop/view/old/OldMineActivity.java
@@ -0,0 +1,166 @@
+package com.stone.shop.view.old;
+
+import java.util.List;
+
+import javax.security.auth.PrivateCredentialPermission;
+
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.listener.FindListener;
+
+import com.stone.shop.R;
+import com.stone.shop.model.User;
+import com.stone.shop.view.AboutActivity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * 个人中心主界面
+ * @date 2014-4-24
+ * @author Stone
+ */
+public class OldMineActivity extends Activity implements OnClickListener{
+
+ private static final String TAG = "OldMineActivity" ;
+
+ private Button btnAbout;
+ private Button btnContact;
+ private Button btnJoin;
+
+ private TextView tvUserName; //当前用户的用户名
+ private TextView tvSchool; //学校
+ private TextView tvCademy; //学院
+ private TextView tvDorPart; //所在区 西区
+ private TextView tvDorNum; //宿舍楼号 19栋
+
+ private TextView tvMe; //我
+ private TextView tvXiaoCai; //小菜
+ private TextView tvBowl; //饭碗
+ private User user = new User();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_old);
+
+ BmobUser user = BmobUser.getCurrentUser(this);
+ Log.i(TAG, "BmobUser.userName = " + user.getUsername());
+ getCurUser(user.getUsername());
+
+ initView();
+ }
+
+ public void initView() {
+
+ tvUserName = (TextView) findViewById(R.id.tv_username);
+ tvSchool = (TextView) findViewById(R.id.tv_school);
+ tvCademy = (TextView) findViewById(R.id.tv_cademy);
+ tvDorPart = (TextView) findViewById(R.id.tv_dorPart);
+ tvDorNum = (TextView) findViewById(R.id.tv_dorNum);
+
+ btnAbout = (Button) findViewById(R.id.btn_about);
+ btnContact = (Button) findViewById(R.id.btn_contact);
+ btnJoin = (Button) findViewById(R.id.btn_share);
+
+ tvUserName = (TextView) findViewById(R.id.tv_username);
+ tvMe = (TextView) findViewById(R.id.tv_me);
+ tvXiaoCai = (TextView) findViewById(R.id.tv_xiaocai);
+ tvBowl = (TextView) findViewById(R.id.tv_bowl);
+
+ btnAbout.setOnClickListener(this);
+ btnContact.setOnClickListener(this);
+ btnJoin.setOnClickListener(this);
+
+ tvMe.setOnClickListener(this);
+ tvXiaoCai.setOnClickListener(this);
+ tvBowl.setOnClickListener(this);
+ }
+
+ //获得当前用户User类型
+ public void getCurUser(String username) {
+ BmobQuery query = new BmobQuery();
+ query.addWhereEqualTo("username", username);
+ query.findObjects(this, new FindListener() {
+ @Override
+ public void onSuccess(List object) {
+ if(object.size()==1)
+ user = object.get(0);
+ else
+ user = null;
+ loadData();
+ //toast("查询到:" + object.size());
+ }
+
+ @Override
+ public void onError(int arg0, String arg1) {
+ toast("获取信息失败");
+ }
+ });
+ }
+
+ //加载查询到的用户数据
+ public void loadData() {
+ //toast("加载数据中...");
+ tvUserName.setText(user.getUsername());
+ tvSchool.setText(user.getSchool());
+ tvCademy.setText(user.getCademy());
+ tvDorPart.setText(user.getDorPart());
+ tvDorNum.setText(user.getDorNum());
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btn_share:
+ Intent toShare = new Intent(Intent.ACTION_SEND);
+ toShare.setType("text/plain");
+ toShare.putExtra(Intent.EXTRA_SUBJECT, "分享");
+ toShare.putExtra(Intent.EXTRA_TEXT, "在这里" +"\n" + "针对NUDT三号狱的在这里测试版上线了,赶紧下载体验吧"
+ + "http://xiaocai.bmob.cn");
+ startActivity(Intent.createChooser(toShare, "分享到"));
+ break;
+ case R.id.tv_me:
+ startAnim(R.id.tv_me);
+ break;
+ case R.id.tv_xiaocai:
+ startAnim(R.id.tv_xiaocai);
+ break;
+ case R.id.tv_bowl:
+ startAnim(R.id.tv_bowl);
+ break;
+ default:
+ Intent toAbout = new Intent(OldMineActivity.this, AboutActivity.class);
+ startActivity(toAbout);
+ break;
+ }
+ }
+
+ //点击文字动画
+ private void startAnim(int id){
+ Animation scale = AnimationUtils.loadAnimation(this, R.anim.shake);
+ if(id == R.id.tv_me)
+ tvMe.startAnimation(scale);
+ else if(id == R.id.tv_xiaocai)
+ tvXiaoCai.startAnimation(scale);
+ else if(id == R.id.tv_bowl)
+ tvBowl.startAnimation(scale);
+ else { }
+ }
+
+ private void toast(String toast) {
+ Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
+ }
+
+
+
+}
diff --git a/代码/在这里2.1/src/com/stone/ui/AutoScrollViewPager.java b/代码/在这里2.1/src/com/stone/ui/AutoScrollViewPager.java
new file mode 100644
index 0000000..0d542cd
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/ui/AutoScrollViewPager.java
@@ -0,0 +1,337 @@
+package com.stone.ui;
+
+import java.lang.reflect.Field;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.animation.Interpolator;
+
+/**
+ * Auto Scroll View Pager
+ *
+ * Basic Setting and Usage
+ *
{@link #startAutoScroll()} start auto scroll, or {@link #startAutoScroll(int)} start auto scroll delayed
+ *
{@link #stopAutoScroll()} stop auto scroll
+ *
{@link #setInterval(long)} set auto scroll time in milliseconds, default is {@link #DEFAULT_INTERVAL}
+ *
+ *
+ * Advanced Settings and Usage
+ *
{@link #setDirection(int)} set auto scroll direction
+ *
{@link #setCycle(boolean)} set whether automatic cycle when auto scroll reaching the last or first item, default
+ * is true
+ *
{@link #setSlideBorderMode(int)} set how to process when sliding at the last or first item
+ *
{@link #setStopScrollWhenTouch(boolean)} set whether stop auto scroll when touching, default is true
+ *
+ *
+ * @author Trinea 2013-12-30
+ */
+public class AutoScrollViewPager extends ViewPager {
+ public static final int DEFAULT_INTERVAL = 1500;
+
+ public static final int LEFT = 0;
+ public static final int RIGHT = 1;
+
+ /** do nothing when sliding at the last or first item **/
+ public static final int SLIDE_BORDER_MODE_NONE = 0;
+ /** cycle when sliding at the last or first item **/
+ public static final int SLIDE_BORDER_MODE_CYCLE = 1;
+ /** deliver event to parent when sliding at the last or first item **/
+ public static final int SLIDE_BORDER_MODE_TO_PARENT = 2;
+
+ /** auto scroll time in milliseconds, default is {@link #DEFAULT_INTERVAL} **/
+ private long interval = DEFAULT_INTERVAL;
+ /** auto scroll direction, default is {@link #RIGHT} **/
+ private int direction = RIGHT;
+ /** whether automatic cycle when auto scroll reaching the last or first item, default is true **/
+ private boolean isCycle = true;
+ /** whether stop auto scroll when touching, default is true **/
+ private boolean stopScrollWhenTouch = true;
+ /** how to process when sliding at the last or first item, default is {@link #SLIDE_BORDER_MODE_NONE} **/
+ private int slideBorderMode = SLIDE_BORDER_MODE_NONE;
+ /** whether animating when auto scroll at the last or first item **/
+ private boolean isBorderAnimation = true;
+
+ private Handler handler;
+ private boolean isAutoScroll = false;
+ private boolean isStopByTouch = false;
+ private float touchX = 0f, downX = 0f;
+ private CustomDurationScroller scroller = null;
+
+ public static final int SCROLL_WHAT = 0;
+
+ public AutoScrollViewPager(Context paramContext){
+ super(paramContext);
+ init();
+ }
+
+ public AutoScrollViewPager(Context paramContext, AttributeSet paramAttributeSet){
+ super(paramContext, paramAttributeSet);
+ init();
+ }
+
+ private void init() {
+ handler = new MyHandler();
+ setViewPagerScroller();
+ }
+
+ /**
+ * start auto scroll, first scroll delay time is {@link #getInterval()}
+ */
+ public void startAutoScroll() {
+ isAutoScroll = true;
+ sendScrollMessage(interval);
+ }
+
+ /**
+ * start auto scroll
+ *
+ * @param delayTimeInMills first scroll delay time
+ */
+ public void startAutoScroll(int delayTimeInMills) {
+ isAutoScroll = true;
+ sendScrollMessage(delayTimeInMills);
+ }
+
+ /**
+ * stop auto scroll
+ */
+ public void stopAutoScroll() {
+ isAutoScroll = false;
+ handler.removeMessages(SCROLL_WHAT);
+ }
+
+ /**
+ * set the factor by which the duration of sliding animation will change
+ */
+ public void setScrollDurationFactor(double scrollFactor) {
+ scroller.setScrollDurationFactor(scrollFactor);
+ }
+
+ private void sendScrollMessage(long delayTimeInMills) {
+ /** remove messages before, keeps one message is running at most **/
+ handler.removeMessages(SCROLL_WHAT);
+ handler.sendEmptyMessageDelayed(SCROLL_WHAT, delayTimeInMills);
+ }
+
+ /**
+ * set ViewPager scroller to change animation duration when sliding
+ */
+ private void setViewPagerScroller() {
+ try {
+ Field scrollerField = ViewPager.class.getDeclaredField("mScroller");
+ scrollerField.setAccessible(true);
+ Field interpolatorField = ViewPager.class.getDeclaredField("sInterpolator");
+ interpolatorField.setAccessible(true);
+
+ scroller = new CustomDurationScroller(getContext(), (Interpolator)interpolatorField.get(null));
+ scrollerField.set(this, scroller);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * scroll only once
+ */
+ public void scrollOnce() {
+ PagerAdapter adapter = getAdapter();
+ int currentItem = getCurrentItem();
+ int totalCount;
+ if (adapter == null || (totalCount = adapter.getCount()) <= 1) {
+ return;
+ }
+
+ int nextItem = (direction == LEFT) ? --currentItem : ++currentItem;
+ if (nextItem < 0) {
+ if (isCycle) {
+ setCurrentItem(totalCount - 1, isBorderAnimation);
+ }
+ } else if (nextItem == totalCount) {
+ if (isCycle) {
+ setCurrentItem(0, isBorderAnimation);
+ }
+ } else {
+ setCurrentItem(nextItem, true);
+ }
+ }
+
+ /**
+ *
+ * if stopScrollWhenTouch is true
+ *
if event is down, stop auto scroll.
+ *
if event is up, start auto scroll again.
+ *
+ */
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ if (stopScrollWhenTouch) {
+ if (ev.getAction() == MotionEvent.ACTION_DOWN && isAutoScroll) {
+ isStopByTouch = true;
+ stopAutoScroll();
+ } else if (ev.getAction() == MotionEvent.ACTION_UP && isStopByTouch) {
+ startAutoScroll();
+ }
+ }
+
+ if (slideBorderMode == SLIDE_BORDER_MODE_TO_PARENT || slideBorderMode == SLIDE_BORDER_MODE_CYCLE) {
+ touchX = ev.getX();
+ if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+ downX = touchX;
+ }
+ int currentItem = getCurrentItem();
+ PagerAdapter adapter = getAdapter();
+ int pageCount = adapter == null ? 0 : adapter.getCount();
+ /**
+ * current index is first one and slide to right or current index is last one and slide to left.
+ * if slide border mode is to parent, then requestDisallowInterceptTouchEvent false.
+ * else scroll to last one when current item is first one, scroll to first one when current item is last
+ * one.
+ */
+ if ((currentItem == 0 && downX <= touchX) || (currentItem == pageCount - 1 && downX >= touchX)) {
+ if (slideBorderMode == SLIDE_BORDER_MODE_TO_PARENT) {
+ getParent().requestDisallowInterceptTouchEvent(false);
+ } else {
+ if (pageCount > 1) {
+ setCurrentItem(pageCount - currentItem - 1, isBorderAnimation);
+ }
+ getParent().requestDisallowInterceptTouchEvent(true);
+ }
+ return super.onTouchEvent(ev);
+ }
+ }
+ getParent().requestDisallowInterceptTouchEvent(true);
+ return super.onTouchEvent(ev);
+ }
+
+ private class MyHandler extends Handler {
+
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+
+ switch (msg.what) {
+ case SCROLL_WHAT:
+ scrollOnce();
+ sendScrollMessage(interval);
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * get auto scroll time in milliseconds, default is {@link #DEFAULT_INTERVAL}
+ *
+ * @return the interval
+ */
+ public long getInterval() {
+ return interval;
+ }
+
+ /**
+ * set auto scroll time in milliseconds, default is {@link #DEFAULT_INTERVAL}
+ *
+ * @param interval the interval to set
+ */
+ public void setInterval(long interval) {
+ this.interval = interval;
+ }
+
+ /**
+ * get auto scroll direction
+ *
+ * @return {@link #LEFT} or {@link #RIGHT}, default is {@link #RIGHT}
+ */
+ public int getDirection() {
+ return (direction == LEFT) ? LEFT : RIGHT;
+ }
+
+ /**
+ * set auto scroll direction
+ *
+ * @param direction {@link #LEFT} or {@link #RIGHT}, default is {@link #RIGHT}
+ */
+ public void setDirection(int direction) {
+ this.direction = direction;
+ }
+
+ /**
+ * whether automatic cycle when auto scroll reaching the last or first item, default is true
+ *
+ * @return the isCycle
+ */
+ public boolean isCycle() {
+ return isCycle;
+ }
+
+ /**
+ * set whether automatic cycle when auto scroll reaching the last or first item, default is true
+ *
+ * @param isCycle the isCycle to set
+ */
+ public void setCycle(boolean isCycle) {
+ this.isCycle = isCycle;
+ }
+
+ /**
+ * whether stop auto scroll when touching, default is true
+ *
+ * @return the stopScrollWhenTouch
+ */
+ public boolean isStopScrollWhenTouch() {
+ return stopScrollWhenTouch;
+ }
+
+ /**
+ * set whether stop auto scroll when touching, default is true
+ *
+ * @param stopScrollWhenTouch
+ */
+ public void setStopScrollWhenTouch(boolean stopScrollWhenTouch) {
+ this.stopScrollWhenTouch = stopScrollWhenTouch;
+ }
+
+ /**
+ * get how to process when sliding at the last or first item
+ *
+ * @return the slideBorderMode {@link #SLIDE_BORDER_MODE_NONE}, {@link #SLIDE_BORDER_MODE_TO_PARENT},
+ * {@link #SLIDE_BORDER_MODE_CYCLE}, default is {@link #SLIDE_BORDER_MODE_NONE}
+ */
+ public int getSlideBorderMode() {
+ return slideBorderMode;
+ }
+
+ /**
+ * set how to process when sliding at the last or first item
+ *
+ * @param slideBorderMode {@link #SLIDE_BORDER_MODE_NONE}, {@link #SLIDE_BORDER_MODE_TO_PARENT},
+ * {@link #SLIDE_BORDER_MODE_CYCLE}, default is {@link #SLIDE_BORDER_MODE_NONE}
+ */
+ public void setSlideBorderMode(int slideBorderMode) {
+ this.slideBorderMode = slideBorderMode;
+ }
+
+ /**
+ * whether animating when auto scroll at the last or first item, default is true
+ *
+ * @return
+ */
+ public boolean isBorderAnimation() {
+ return isBorderAnimation;
+ }
+
+ /**
+ * set whether animating when auto scroll at the last or first item, default is true
+ *
+ * @param isBorderAnimation
+ */
+ public void setBorderAnimation(boolean isBorderAnimation) {
+ this.isBorderAnimation = isBorderAnimation;
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/ui/CustomDurationScroller.java b/代码/在这里2.1/src/com/stone/ui/CustomDurationScroller.java
new file mode 100644
index 0000000..6155603
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/ui/CustomDurationScroller.java
@@ -0,0 +1,47 @@
+package com.stone.ui;
+
+import android.content.Context;
+import android.view.animation.Interpolator;
+import android.widget.Scroller;
+
+
+/**
+ * CustomDurationScroller
+ *
+ * @author Trinea 2014-3-2
+ */
+public class CustomDurationScroller extends Scroller {
+ private double scrollFactor = 2;
+
+ public CustomDurationScroller(Context context){
+ super(context);
+ }
+
+ public CustomDurationScroller(Context context, Interpolator interpolator){
+ super(context, interpolator);
+ }
+
+ /**
+ * not exist in android 2.3
+ *
+ * @param context
+ * @param interpolator
+ * @param flywheel
+ */
+ // @SuppressLint("NewApi")
+ // public CustomDurationScroller(Context context, Interpolator interpolator, boolean flywheel){
+ // super(context, interpolator, flywheel);
+ // }
+
+ /**
+ * Set the factor by which the duration will change
+ */
+ public void setScrollDurationFactor(double scrollFactor) {
+ this.scrollFactor = scrollFactor;
+ }
+
+ @Override
+ public void startScroll(int startX, int startY, int dx, int dy, int duration) {
+ super.startScroll(startX, startY, dx, dy, (int)(duration * scrollFactor));
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/ui/DateTimePickDialogUtil.java b/代码/在这里2.1/src/com/stone/ui/DateTimePickDialogUtil.java
new file mode 100644
index 0000000..6ba2bfe
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/ui/DateTimePickDialogUtil.java
@@ -0,0 +1,188 @@
+package com.stone.ui;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+import com.stone.shop.R;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.widget.DatePicker;
+import android.widget.DatePicker.OnDateChangedListener;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TimePicker;
+import android.widget.TimePicker.OnTimeChangedListener;
+
+/**
+ * 日期时间选择控件 使用方法: private EditText inputDate;//需要设置的日期时间文本编辑框 private String
+ * initDateTime="2012年9月3日 14:44",//初始日期时间值 在点击事件中使用:
+ * inputDate.setOnClickListener(new OnClickListener() {
+ *
+ * @Override public void onClick(View v) { DateTimePickDialogUtil
+ * dateTimePicKDialog=new
+ * DateTimePickDialogUtil(SinvestigateActivity.this,initDateTime);
+ * dateTimePicKDialog.dateTimePicKDialog(inputDate);
+ *
+ * } });
+ *
+ * @author
+ */
+public class DateTimePickDialogUtil implements OnDateChangedListener, OnTimeChangedListener {
+ private DatePicker datePicker;
+ private TimePicker timePicker;
+ private AlertDialog ad;
+ private String dateTime;
+ private String initDateTime;
+ private Activity activity;
+ private DateTimeListener dateTimeListener;
+
+ /**
+ * 日期时间弹出选择框构造函数
+ *
+ * @param activity
+ * :调用的父activity
+ * @param initDateTime
+ * 初始日期时间值,作为弹出窗口的标题和日期时间初始值
+ */
+ public DateTimePickDialogUtil(Activity activity, String initDateTime) {
+ this.activity = activity;
+ this.initDateTime = initDateTime;
+
+ }
+
+ public void init(DatePicker datePicker, TimePicker timePicker) {
+ Calendar calendar = Calendar.getInstance();
+ if (!(null == initDateTime || "".equals(initDateTime))) {
+ calendar = this.getCalendarByInintData(initDateTime);
+ } else {
+ initDateTime = calendar.get(Calendar.YEAR) + "年" + calendar.get(Calendar.MONTH) + "月"
+ + calendar.get(Calendar.DAY_OF_MONTH) + "日 " + calendar.get(Calendar.HOUR_OF_DAY) + ":"
+ + calendar.get(Calendar.MINUTE);
+ }
+
+ datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH),
+ this);
+ timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
+ timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
+ }
+
+ /**
+ * 弹出日期时间选择框方法
+ *
+ * @param inputDate
+ * :为需要设置的日期时间文本编辑框
+ * @return
+ */
+ public AlertDialog dateTimePicKDialog(final DateTimeListener dateTimeListener) {
+ LinearLayout dateTimeLayout = (LinearLayout) activity.getLayoutInflater().inflate(R.layout.common_datetime,
+ null);
+ datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
+ timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
+ init(datePicker, timePicker);
+ timePicker.setIs24HourView(true);
+ timePicker.setOnTimeChangedListener(this);
+
+ ad = new AlertDialog.Builder(activity).setTitle(initDateTime).setView(dateTimeLayout)
+ .setPositiveButton("设置", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+
+ if (dateTimeListener != null) {
+ dateTimeListener.onDateTimeChane(dateTime);
+ }
+ }
+ }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+
+ }
+ }).show();
+
+ onDateChanged(null, 0, 0, 0);
+ return ad;
+ }
+
+ public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
+ onDateChanged(null, 0, 0, 0);
+ }
+
+ public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
+ // 获得日历实例
+ Calendar calendar = Calendar.getInstance();
+
+ calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(),
+ timePicker.getCurrentHour(), timePicker.getCurrentMinute());
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
+
+ dateTime = sdf.format(calendar.getTime());
+ ad.setTitle(dateTime);
+ }
+
+ /**
+ * 实现将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒,并赋值给calendar
+ *
+ * @param initDateTime
+ * 初始日期时间值 字符串型
+ * @return Calendar
+ */
+ private Calendar getCalendarByInintData(String initDateTime) {
+ Calendar calendar = Calendar.getInstance();
+
+ // 将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒
+ String date = spliteString(initDateTime, "日", "index", "front"); // 日期
+ String time = spliteString(initDateTime, "日", "index", "back"); // 时间
+
+ String yearStr = spliteString(date, "年", "index", "front"); // 年份
+ String monthAndDay = spliteString(date, "年", "index", "back"); // 月日
+
+ String monthStr = spliteString(monthAndDay, "月", "index", "front"); // 月
+ String dayStr = spliteString(monthAndDay, "月", "index", "back"); // 日
+
+ String hourStr = spliteString(time, ":", "index", "front"); // 时
+ String minuteStr = spliteString(time, ":", "index", "back"); // 分
+
+ int currentYear = Integer.valueOf(yearStr.trim()).intValue();
+ int currentMonth = Integer.valueOf(monthStr.trim()).intValue() - 1;
+ int currentDay = Integer.valueOf(dayStr.trim()).intValue();
+ int currentHour = Integer.valueOf(hourStr.trim()).intValue();
+ int currentMinute = Integer.valueOf(minuteStr.trim()).intValue();
+
+ calendar.set(currentYear, currentMonth, currentDay, currentHour, currentMinute);
+ return calendar;
+ }
+
+ /**
+ * 截取子串
+ *
+ * @param srcStr
+ * 源串
+ * @param pattern
+ * 匹配模式
+ * @param indexOrLast
+ * @param frontOrBack
+ * @return
+ */
+ public static String spliteString(String srcStr, String pattern, String indexOrLast, String frontOrBack) {
+ String result = "";
+ int loc = -1;
+ if (indexOrLast.equalsIgnoreCase("index")) {
+ loc = srcStr.indexOf(pattern); // 取得字符串第一次出现的位置
+ } else {
+ loc = srcStr.lastIndexOf(pattern); // 最后一个匹配串的位置
+ }
+ if (frontOrBack.equalsIgnoreCase("front")) {
+ if (loc != -1)
+ result = srcStr.substring(0, loc); // 截取子串
+ } else {
+ if (loc != -1)
+ result = srcStr.substring(loc + 1, srcStr.length()); // 截取子串
+ }
+ return result;
+ }
+
+ public interface DateTimeListener {
+
+ void onDateTimeChane(String dateTime);
+
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/ui/DialogOrder.java b/代码/在这里2.1/src/com/stone/ui/DialogOrder.java
new file mode 100644
index 0000000..efbd9a3
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/ui/DialogOrder.java
@@ -0,0 +1,68 @@
+package com.stone.ui;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TimePicker;
+
+import com.stone.shop.R;
+
+/**
+ * 对话框订单
+ * @date 2014-5-11
+ * @author Stone
+ */
+public class DialogOrder extends Dialog implements OnClickListener{
+
+ private Context context;
+ private Button btnDlgOk;
+ private TimePicker tpDlgTime;
+ private OrderDialogListener listener;
+
+ public interface OrderDialogListener{
+ public void onClick(View view);
+ }
+
+ public DialogOrder(Context context) {
+ super(context);
+ this.context = context;
+ }
+
+ public DialogOrder(Context context, int theme){
+ super(context, theme);
+ this.context = context;
+ }
+
+ public DialogOrder(Context context, int theme, DialogOrder.OrderDialogListener orderDialogListener){
+ super(context, theme);
+ this.context = context;
+ this.listener = orderDialogListener;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ this.setContentView(R.layout.dlg_order_settime);
+ initView();
+ }
+
+ private void initView() {
+ tpDlgTime = (TimePicker) findViewById(R.id.tp_dlg_time);
+ tpDlgTime.setIs24HourView(true);
+ btnDlgOk = (Button) findViewById(R.id.btn_dlg_ok);
+ btnDlgOk.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ listener.onClick(v);
+ }
+
+ public String getTime() {
+ return tpDlgTime.getCurrentHour() + " : " + tpDlgTime.getCurrentMinute();
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/ui/ListScrollView.java b/代码/在这里2.1/src/com/stone/ui/ListScrollView.java
new file mode 100644
index 0000000..a04aaf7
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/ui/ListScrollView.java
@@ -0,0 +1,63 @@
+package com.stone.ui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.ListView;
+import android.widget.ScrollView;
+
+public class ListScrollView extends ScrollView {
+
+ private ListView listView;
+
+ public ListScrollView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public ListScrollView(Context context) {
+ super(context);
+ }
+
+ /**
+ * 覆写onInterceptTouchEvent方法,点击操作发生在ListView的区域的时候,
+ * 返回false让ScrollView的onTouchEvent接收不到MotionEvent,而是把Event传到下一级的控件中
+ */
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ // TODO Auto-generated method stub
+ if (listView != null && checkArea(listView, ev)) {
+ return false;
+ }
+ return super.onInterceptTouchEvent(ev);
+ }
+
+ /**
+ * 测试view是否在点击范围内
+ * @param locate
+ * @param v
+ * @return
+ */
+ private boolean checkArea(View v, MotionEvent event){
+ float x = event.getRawX();
+ float y = event.getRawY();
+ int[] locate = new int[2];
+ v.getLocationOnScreen(locate);
+ int l = locate[0];
+ int r = l + v.getWidth();
+ int t = locate[1];
+ int b = t + v.getHeight();
+ if (l < x && x < r && t < y && y < b) {
+ return true;
+ }
+ return false;
+ }
+
+ public ListView getListView() {
+ return listView;
+ }
+
+ public void setListView(ListView listView) {
+ this.listView = listView;
+ }
+}
diff --git a/代码/在这里2.1/src/com/stone/ui/MyGridView.java b/代码/在这里2.1/src/com/stone/ui/MyGridView.java
new file mode 100644
index 0000000..dbbbf38
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/ui/MyGridView.java
@@ -0,0 +1,32 @@
+package com.stone.ui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.GridView;
+
+/**
+ * 商品详情页--商品分类网格视图
+ * @author Stone
+ */
+public class MyGridView extends GridView {
+
+ public MyGridView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public MyGridView(Context context) {
+ super(context);
+ }
+
+ public MyGridView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
+ MeasureSpec.AT_MOST);
+ super.onMeasure(widthMeasureSpec, expandSpec);
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/ui/ViewPagerCompat.java b/代码/在这里2.1/src/com/stone/ui/ViewPagerCompat.java
new file mode 100644
index 0000000..72f36a8
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/ui/ViewPagerCompat.java
@@ -0,0 +1,66 @@
+package com.stone.ui;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+/**
+ * 商铺详情页--ViewPager的加强类,主要是为了解决滑动冲突的问题。不然的话,
+ * 在ViewPager内部加入ListView等可滑动控件,两者之间会产生干扰。
+ * @author Stone
+ * {@link} http://blog.csdn.net/singwhatiwanna/article/details/17201587
+ */
+public class ViewPagerCompat extends ViewPager {
+ // mViewTouchMode表示ViewPager是否全权控制滑动事件,默认为false,即不控制
+ private boolean mViewTouchMode = false;
+
+ public ViewPagerCompat(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public void setViewTouchMode(boolean b) {
+ if (b && !isFakeDragging()) {
+ // 全权控制滑动事件
+ beginFakeDrag();
+ } else if (!b && isFakeDragging()) {
+ // 终止控制滑动事件
+ endFakeDrag();
+ }
+ mViewTouchMode = b;
+ }
+
+ /**
+ * 在mViewTouchMode为true的时候,ViewPager不拦截点击事件,点击事件将由子View处理
+ */
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent event) {
+ if (mViewTouchMode) {
+ return false;
+ }
+ return super.onInterceptTouchEvent(event);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ try {
+ return super.onTouchEvent(ev);
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ /**
+ * 在mViewTouchMode为true或者滑动方向不是左右的时候,ViewPager将放弃控制点击事件,
+ * 这样做有利于在ViewPager中加入ListView等可以滑动的控件,否则两者之间的滑动将会有冲突
+ */
+ @Override
+ public boolean arrowScroll(int direction) {
+ if (mViewTouchMode)
+ return false;
+ if (direction != FOCUS_LEFT && direction != FOCUS_RIGHT)
+ return false;
+ return super.arrowScroll(direction);
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/util/ActivityUtil.java b/代码/在这里2.1/src/com/stone/util/ActivityUtil.java
new file mode 100644
index 0000000..40870f2
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/util/ActivityUtil.java
@@ -0,0 +1,23 @@
+package com.stone.util;
+
+import android.content.Context;
+import android.view.Gravity;
+import android.widget.Toast;
+
+public final class ActivityUtil {
+
+ /**
+ * 短时间显示Toast消息,并保证运行在UI线程中
+ *
+ * @param activity
+ * Activity
+ * @param message
+ * 消息内容
+ */
+ public static void show(final Context context, final String message) {
+ Toast toast = ToastFactory.getToast(context, message);
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/util/ToastFactory.java b/代码/在这里2.1/src/com/stone/util/ToastFactory.java
new file mode 100644
index 0000000..389aae3
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/util/ToastFactory.java
@@ -0,0 +1,31 @@
+package com.stone.util;
+
+import android.content.Context;
+import android.widget.Toast;
+
+
+public class ToastFactory {
+ private static Context context = null;
+ private static Toast toast = null;
+
+ public static Toast getToast(Context context, String text) {
+ if (ToastFactory.context == context) {
+ // toast.cancel();
+ toast.setText(text);
+ toast.setDuration(Toast.LENGTH_SHORT);
+
+ } else {
+
+ ToastFactory.context = context;
+ toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
+ }
+ return toast;
+ }
+
+ public static void cancelToast() {
+ if (toast != null) {
+ toast.cancel();
+ }
+ }
+
+}
diff --git a/代码/在这里2.1/src/com/stone/util/Util.java b/代码/在这里2.1/src/com/stone/util/Util.java
new file mode 100644
index 0000000..653e1f9
--- /dev/null
+++ b/代码/在这里2.1/src/com/stone/util/Util.java
@@ -0,0 +1,756 @@
+package com.stone.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.ProgressDialog;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Bitmap.CompressFormat;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+import junit.framework.Assert;
+
+/**
+ * 工具类
+ *
+ * @date 2014-5-9
+ * @author Stone
+ */
+public class Util {
+
+ /**
+ * 判断电话号码是否有效
+ *
+ * @param phoneNumber
+ * @return true 有效 / false 无效
+ */
+ public static boolean isPhoneNumberValid(String phoneNumber) {
+
+ boolean isValid = false;
+
+ String expression = "((^(13|15|18)[0-9]{9}$)|(^0[1,2]{1}\\d{1}-?\\d{8}$)|(^0[3-9] {1}\\d{2}-?\\d{7,8}$)|(^0[1,2]{1}\\d{1}-?\\d{8}-(\\d{1,4})$)|(^0[3-9]{1}\\d{2}-? \\d{7,8}-(\\d{1,4})$))";
+ CharSequence inputStr = phoneNumber;
+
+ Pattern pattern = Pattern.compile(expression);
+ Matcher matcher = pattern.matcher(inputStr);
+
+ if (matcher.matches()) {
+ isValid = true;
+ }
+ return isValid;
+ }
+
+ // 判断网络是否连接
+ public static boolean isNetworkConnected(Context context) {
+ if (context != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) context
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo mNetworkInfo = mConnectivityManager
+ .getActiveNetworkInfo();
+ if (mNetworkInfo != null) {
+ return mNetworkInfo.isAvailable();
+ }
+ }
+ return false;
+ }
+
+private static final String TAG = "SDK_Sample.Util";
+
+ private static Dialog mProgressDialog;
+ private static Toast mToast;
+
+ /* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。
+ * @param src byte[] data
+ * @return hex string
+ */
+ public static String bytesToHexString(byte[] src){
+ StringBuilder stringBuilder = new StringBuilder("");
+ if (src == null || src.length <= 0) {
+ return null;
+ }
+ for (int i = 0; i < src.length; i++) {
+ int v = src[i] & 0xFF;
+ String hv = Integer.toHexString(v);
+ if (hv.length() < 2) {
+ stringBuilder.append(0);
+ }
+ stringBuilder.append(hv);
+ }
+ return stringBuilder.toString();
+ }
+ /**
+ * Convert hex string to byte[]
+ * @param hexString the hex string
+ * @return byte[]
+ */
+ public static byte[] hexStringToBytes(String hexString) {
+ if (hexString == null || hexString.equals("")) {
+ return null;
+ }
+ hexString = hexString.toUpperCase();
+ int length = hexString.length() / 2;
+ char[] hexChars = hexString.toCharArray();
+ byte[] d = new byte[length];
+ for (int i = 0; i < length; i++) {
+ int pos = i * 2;
+ d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
+ }
+ return d;
+ }
+ /**
+ * Convert char to byte
+ * @param c char
+ * @return byte
+ */
+ private static byte charToByte(char c) {
+ return (byte) "0123456789ABCDEF".indexOf(c);
+ }
+
+ /*
+ * 16进制数字字符集
+ */
+ private static String hexString="0123456789ABCDEF";
+ /*
+ * 将字符串编码成16进制数字,适用于所有字符(包括中文)
+ */
+ public static String toHexString(String str)
+ {
+//根据默认编码获取字节数组
+ byte[] bytes = null;
+ try {
+ bytes = str.getBytes("UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ if (bytes == null) return null;
+ StringBuilder sb=new StringBuilder(bytes.length*2);
+//将字节数组中每个字节拆解成2位16进制整数
+ for(int i=0;i>4));
+ sb.append(hexString.charAt((bytes[i]&0x0f)>>0));
+ }
+ return sb.toString();
+ }
+
+ //转换十六进制编码为字符串
+ public static String hexToString(String s)
+ {
+ if("0x".equals(s.substring(0, 2)))
+ {
+ s =s.substring(2);
+ }
+ byte[] baKeyword = new byte[s.length()/2];
+ for(int i = 0; i < baKeyword.length; i++)
+ {
+ try
+ {
+ baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ try
+ {
+ s = new String(baKeyword, "utf-8");//UTF-16le:Not
+ }
+ catch (Exception e1)
+ {
+ e1.printStackTrace();
+ }
+ return s;
+ }
+
+ public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+ bmp.compress(CompressFormat.PNG, 100, output);
+ if (needRecycle) {
+ bmp.recycle();
+ }
+
+ byte[] result = output.toByteArray();
+ try {
+ output.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return result;
+ }
+
+ public static byte[] getHtmlByteArray(final String url) {
+ URL htmlUrl = null;
+ InputStream inStream = null;
+ try {
+ htmlUrl = new URL(url);
+ URLConnection connection = htmlUrl.openConnection();
+ HttpURLConnection httpConnection = (HttpURLConnection)connection;
+ int responseCode = httpConnection.getResponseCode();
+ if(responseCode == HttpURLConnection.HTTP_OK){
+ inStream = httpConnection.getInputStream();
+ }
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ byte[] data = inputStreamToByte(inStream);
+
+ return data;
+ }
+
+ public static byte[] inputStreamToByte(InputStream is) {
+ try{
+ ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
+ int ch;
+ while ((ch = is.read()) != -1) {
+ bytestream.write(ch);
+ }
+ byte imgdata[] = bytestream.toByteArray();
+ bytestream.close();
+ return imgdata;
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+ public static byte[] readFromFile(String fileName, int offset, int len) {
+ if (fileName == null) {
+ return null;
+ }
+
+ File file = new File(fileName);
+ if (!file.exists()) {
+ Log.i(TAG, "readFromFile: file not found");
+ return null;
+ }
+
+ if (len == -1) {
+ len = (int) file.length();
+ }
+
+ Log.d(TAG, "readFromFile : offset = " + offset + " len = " + len + " offset + len = " + (offset + len));
+
+ if(offset <0){
+ Log.e(TAG, "readFromFile invalid offset:" + offset);
+ return null;
+ }
+ if(len <=0 ){
+ Log.e(TAG, "readFromFile invalid len:" + len);
+ return null;
+ }
+ if(offset + len > (int) file.length()){
+ Log.e(TAG, "readFromFile invalid file len:" + file.length());
+ return null;
+ }
+
+ byte[] b = null;
+ try {
+ RandomAccessFile in = new RandomAccessFile(fileName, "r");
+ b = new byte[len];
+ in.seek(offset);
+ in.readFully(b);
+ in.close();
+
+ } catch (Exception e) {
+ Log.e(TAG, "readFromFile : errMsg = " + e.getMessage());
+ e.printStackTrace();
+ }
+ return b;
+ }
+
+ public static int computeSampleSize(BitmapFactory.Options options,
+
+ int minSideLength, int maxNumOfPixels) {
+
+ int initialSize = computeInitialSampleSize(options, minSideLength,
+
+ maxNumOfPixels);
+
+ int roundedSize;
+
+ if (initialSize <= 8) {
+
+ roundedSize = 1;
+
+ while (roundedSize < initialSize) {
+
+ roundedSize <<= 1;
+
+ }
+
+ } else {
+
+ roundedSize = (initialSize + 7) / 8 * 8;
+
+ }
+
+ return roundedSize;
+ }
+
+ private static int computeInitialSampleSize(BitmapFactory.Options options,
+
+ int minSideLength, int maxNumOfPixels) {
+
+ double w = options.outWidth;
+
+ double h = options.outHeight;
+
+ int lowerBound = (maxNumOfPixels == -1) ? 1 :
+
+ (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
+
+ int upperBound = (minSideLength == -1) ? 128 :
+
+ (int) Math.min(Math.floor(w / minSideLength),
+
+ Math.floor(h / minSideLength));
+
+ if (upperBound < lowerBound) {
+
+ // return the larger one when there is no overlapping zone.
+
+ return lowerBound;
+
+ }
+
+ if ((maxNumOfPixels == -1) &&
+
+ (minSideLength == -1)) {
+
+ return 1;
+
+ } else if (minSideLength == -1) {
+
+ return lowerBound;
+
+ } else {
+
+ return upperBound;
+
+ }
+ }
+
+ /**
+ * 以最省内存的方式读取图片
+ */
+ public static Bitmap readBitmap(final String path){
+ try{
+ FileInputStream stream = new FileInputStream(new File(path+"test.jpg"));
+ BitmapFactory.Options opts = new BitmapFactory.Options();
+ opts.inSampleSize = 8;
+ opts.inPurgeable=true;
+ opts.inInputShareable=true;
+ Bitmap bitmap = BitmapFactory.decodeStream(stream , null, opts);
+ return bitmap;
+ } catch (OutOfMemoryError e) {
+ return null;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ private static final int MAX_DECODE_PICTURE_SIZE = 1920 * 1440;
+ public static Bitmap extractThumbNail(final String path, final int height, final int width, final boolean crop) {
+ Assert.assertTrue(path != null && !path.equals("") && height > 0 && width > 0);
+
+ BitmapFactory.Options options = new BitmapFactory.Options();
+
+ try {
+ options.inJustDecodeBounds = true;
+ Bitmap tmp = BitmapFactory.decodeFile(path, options);
+ if (tmp != null) {
+ tmp.recycle();
+ tmp = null;
+ }
+
+ Log.d(TAG, "extractThumbNail: round=" + width + "x" + height + ", crop=" + crop);
+ final double beY = options.outHeight * 1.0 / height;
+ final double beX = options.outWidth * 1.0 / width;
+ Log.d(TAG, "extractThumbNail: extract beX = " + beX + ", beY = " + beY);
+ options.inSampleSize = (int) (crop ? (beY > beX ? beX : beY) : (beY < beX ? beX : beY));
+ if (options.inSampleSize <= 1) {
+ options.inSampleSize = 1;
+ }
+
+ // NOTE: out of memory error
+ while (options.outHeight * options.outWidth / options.inSampleSize > MAX_DECODE_PICTURE_SIZE) {
+ options.inSampleSize++;
+ }
+
+ int newHeight = height;
+ int newWidth = width;
+ if (crop) {
+ if (beY > beX) {
+ newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth);
+ } else {
+ newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight);
+ }
+ } else {
+ if (beY < beX) {
+ newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth);
+ } else {
+ newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight);
+ }
+ }
+
+ options.inJustDecodeBounds = false;
+
+ Log.i(TAG, "bitmap required size=" + newWidth + "x" + newHeight + ", orig=" + options.outWidth + "x" + options.outHeight + ", sample=" + options.inSampleSize);
+ Bitmap bm = BitmapFactory.decodeFile(path, options);
+ if (bm == null) {
+ Log.e(TAG, "bitmap decode failed");
+ return null;
+ }
+
+ Log.i(TAG, "bitmap decoded size=" + bm.getWidth() + "x" + bm.getHeight());
+ final Bitmap scale = Bitmap.createScaledBitmap(bm, newWidth, newHeight, true);
+ if (scale != null) {
+ bm.recycle();
+ bm = scale;
+ }
+
+ if (crop) {
+ final Bitmap cropped = Bitmap.createBitmap(bm, (bm.getWidth() - width) >> 1, (bm.getHeight() - height) >> 1, width, height);
+ if (cropped == null) {
+ return bm;
+ }
+
+ bm.recycle();
+ bm = cropped;
+ Log.i(TAG, "bitmap croped size=" + bm.getWidth() + "x" + bm.getHeight());
+ }
+ return bm;
+
+ } catch (final OutOfMemoryError e) {
+ Log.e(TAG, "decode bitmap failed: " + e.getMessage());
+ options = null;
+ }
+
+ return null;
+ }
+
+ public static final void showResultDialog(Context context, String msg,
+ String title) {
+ if(msg == null) return;
+ String rmsg = msg.replace(",", "\n");
+ Log.d("Util", rmsg);
+ new AlertDialog.Builder(context).setTitle(title).setMessage(rmsg)
+ .setNegativeButton("知道了", null).create().show();
+ }
+
+ public static final void showProgressDialog(Context context, String title,
+ String message) {
+ dismissDialog();
+ if (TextUtils.isEmpty(title)) {
+ title = "请稍候";
+ }
+ if (TextUtils.isEmpty(message)) {
+ message = "正在加载...";
+ }
+ mProgressDialog = ProgressDialog.show(context, title, message);
+ }
+
+ public static AlertDialog showConfirmCancelDialog(Context context,
+ String title, String message,
+ DialogInterface.OnClickListener posListener) {
+ AlertDialog dlg = new AlertDialog.Builder(context).setMessage(message)
+ .setPositiveButton("确认", posListener)
+ .setNegativeButton("取消", null).create();
+ dlg.setCanceledOnTouchOutside(false);
+ dlg.show();
+ return dlg;
+ }
+
+ public static final void dismissDialog() {
+ if (mProgressDialog != null) {
+ mProgressDialog.dismiss();
+ mProgressDialog = null;
+ }
+ }
+
+ /**
+ * 打印消息并且用Toast显示消息
+ *
+ * @param activity
+ * @param message
+ * @param logLevel
+ * 填d, w, e分别代表debug, warn, error; 默认是debug
+ */
+ public static final void toastMessage(final Activity activity,
+ final String message, String logLevel) {
+ if ("w".equals(logLevel)) {
+ Log.w("sdkDemo", message);
+ } else if ("e".equals(logLevel)) {
+ Log.e("sdkDemo", message);
+ } else {
+ Log.d("sdkDemo", message);
+ }
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ // TODO Auto-generated method stub
+ if (mToast != null) {
+ mToast.cancel();
+ mToast = null;
+ }
+ mToast = Toast.makeText(activity, message, Toast.LENGTH_SHORT);
+ mToast.show();
+ }
+ });
+ }
+
+ /**
+ * 打印消息并且用Toast显示消息
+ *
+ * @param activity
+ * @param message
+ * @param logLevel
+ * 填d, w, e分别代表debug, warn, error; 默认是debug
+ */
+ public static final void toastMessage(final Activity activity,
+ final String message) {
+ toastMessage(activity, message, null);
+ }
+
+ /**
+ * 根据一个网络连接(String)获取bitmap图像
+ *
+ * @param imageUri
+ * @return
+ * @throws MalformedURLException
+ */
+ public static Bitmap getbitmap(String imageUri) {
+ Log.v(TAG, "getbitmap:" + imageUri);
+ // 显示网络上的图片
+ Bitmap bitmap = null;
+ try {
+ URL myFileUrl = new URL(imageUri);
+ HttpURLConnection conn = (HttpURLConnection) myFileUrl
+ .openConnection();
+ conn.setDoInput(true);
+ conn.connect();
+ InputStream is = conn.getInputStream();
+ bitmap = BitmapFactory.decodeStream(is);
+ is.close();
+
+ Log.v(TAG, "image download finished." + imageUri);
+ } catch (OutOfMemoryError e) {
+ e.printStackTrace();
+ bitmap = null;
+ } catch (IOException e) {
+ e.printStackTrace();
+ Log.v(TAG, "getbitmap bmp fail---");
+ bitmap = null;
+ }
+ return bitmap;
+ }
+
+ public static void release() {
+ mProgressDialog = null;
+ mToast = null;
+ }
+
+ // =========
+ // =通过URI获取本地图片的path
+ // =兼容android 5.0
+ // ==========
+
+ public static String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
+ public static int Build_VERSION_KITKAT = 19;
+ public static String getPath(final Context context, final Uri uri) {
+
+ final boolean isKitKat = Build.VERSION.SDK_INT >= 19;
+
+ // DocumentProvider
+ if (isKitKat && isDocumentUri(context, uri)) {
+ // ExternalStorageProvider
+ if (isExternalStorageDocument(uri)) {
+ final String docId = getDocumentId(uri);
+ final String[] split = docId.split(":");
+ final String type = split[0];
+
+ if ("primary".equalsIgnoreCase(type)) {
+ return Environment.getExternalStorageDirectory() + "/" + split[1];
+ }
+
+ }
+ // DownloadsProvider
+ else if (isDownloadsDocument(uri)) {
+
+ final String id = getDocumentId(uri);
+ final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
+ Long.valueOf(id));
+
+ return getDataColumn(context, contentUri, null, null);
+ }
+ // MediaProvider
+ else if (isMediaDocument(uri)) {
+ final String docId = getDocumentId(uri);
+ final String[] split = docId.split(":");
+ final String type = split[0];
+
+ Uri contentUri = null;
+ if ("image".equals(type)) {
+ contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+ } else if ("video".equals(type)) {
+ contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
+ } else if ("audio".equals(type)) {
+ contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
+ }
+
+ final String selection = "_id=?";
+ final String[] selectionArgs = new String[] { split[1] };
+
+ return getDataColumn(context, contentUri, selection, selectionArgs);
+ }
+ }
+ // MediaStore (and general)
+ else if ("content".equalsIgnoreCase(uri.getScheme())) {
+
+ // Return the remote address
+ if (isGooglePhotosUri(uri))
+ return uri.getLastPathSegment();
+
+ return getDataColumn(context, uri, null, null);
+ }
+ // File
+ else if ("file".equalsIgnoreCase(uri.getScheme())) {
+ return uri.getPath();
+ }
+
+ return null;
+ }
+
+ private static final String PATH_DOCUMENT = "document";
+
+ /**
+ * Test if the given URI represents a {@link Document} backed by a
+ * {@link DocumentsProvider}.
+ */
+ private static boolean isDocumentUri(Context context, Uri uri) {
+ final List paths = uri.getPathSegments();
+ if (paths.size() < 2) {
+ return false;
+ }
+ if (!PATH_DOCUMENT.equals(paths.get(0))) {
+ return false;
+ }
+
+ return true;
+ }
+
+ private static String getDocumentId(Uri documentUri) {
+ final List paths = documentUri.getPathSegments();
+ if (paths.size() < 2) {
+ throw new IllegalArgumentException("Not a document: " + documentUri);
+ }
+ if (!PATH_DOCUMENT.equals(paths.get(0))) {
+ throw new IllegalArgumentException("Not a document: " + documentUri);
+ }
+ return paths.get(1);
+ }
+
+ /**
+ * Get the value of the data column for this Uri. This is useful for
+ * MediaStore Uris, and other file-based ContentProviders.
+ *
+ * @param context
+ * The context.
+ * @param uri
+ * The Uri to query.
+ * @param selection
+ * (Optional) Filter used in the query.
+ * @param selectionArgs
+ * (Optional) Selection arguments used in the query.
+ * [url=home.php?mod=space&uid=7300]@return[/url] The value of
+ * the _data column, which is typically a file path.
+ */
+ public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
+
+ Cursor cursor = null;
+ final String column = "_data";
+ final String[] projection = { column };
+
+ try {
+ cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
+ if (cursor != null && cursor.moveToFirst()) {
+ final int index = cursor.getColumnIndexOrThrow(column);
+ return cursor.getString(index);
+ }
+ } finally {
+ if (cursor != null)
+ cursor.close();
+ }
+ return null;
+ }
+
+ /**
+ * @param uri
+ * The Uri to check.
+ * @return Whether the Uri authority is ExternalStorageProvider.
+ */
+ public static boolean isExternalStorageDocument(Uri uri) {
+ return "com.android.externalstorage.documents".equals(uri.getAuthority());
+ }
+
+ /**
+ * @param uri
+ * The Uri to check.
+ * @return Whether the Uri authority is DownloadsProvider.
+ */
+ public static boolean isDownloadsDocument(Uri uri) {
+ return "com.android.providers.downloads.documents".equals(uri.getAuthority());
+ }
+
+ /**
+ * @param uri
+ * The Uri to check.
+ * @return Whether the Uri authority is MediaProvider.
+ */
+ public static boolean isMediaDocument(Uri uri) {
+ return "com.android.providers.media.documents".equals(uri.getAuthority());
+ }
+
+ /**
+ * @param uri
+ * The Uri to check.
+ * @return Whether the Uri authority is Google Photos.
+ */
+ public static boolean isGooglePhotosUri(Uri uri) {
+ return "com.google.android.apps.photos.content".equals(uri.getAuthority());
+ }
+}
diff --git a/文档/~$需求规格说明书.doc b/文档/~$需求规格说明书.doc
new file mode 100644
index 0000000..7239af3
Binary files /dev/null and b/文档/~$需求规格说明书.doc differ
diff --git a/文档/~WRL0001.tmp b/文档/~WRL0001.tmp
new file mode 100644
index 0000000..2f54c87
Binary files /dev/null and b/文档/~WRL0001.tmp differ
diff --git a/文档/软件需求规格说明书.doc b/文档/软件需求规格说明书.doc
index 5e6803f..4904b57 100644
Binary files a/文档/软件需求规格说明书.doc and b/文档/软件需求规格说明书.doc differ
diff --git a/模型/整体包图.vsd b/模型/整体包图.vsd
new file mode 100644
index 0000000..4fbdefa
Binary files /dev/null and b/模型/整体包图.vsd differ
diff --git a/模型/登录注册用例图.vsd b/模型/登录注册用例图.vsd
new file mode 100644
index 0000000..b27260c
Binary files /dev/null and b/模型/登录注册用例图.vsd differ
diff --git a/模型/登录注册顺序图.vsd b/模型/登录注册顺序图.vsd
new file mode 100644
index 0000000..98045bc
Binary files /dev/null and b/模型/登录注册顺序图.vsd differ
diff --git a/模型/订餐功能用例图.vsd b/模型/订餐功能用例图.vsd
new file mode 100644
index 0000000..d5d2e29
Binary files /dev/null and b/模型/订餐功能用例图.vsd differ
diff --git a/模型/订餐功能顺序图.vsd b/模型/订餐功能顺序图.vsd
new file mode 100644
index 0000000..448cbcc
Binary files /dev/null and b/模型/订餐功能顺序图.vsd differ
diff --git a/模型/讨论区功能用例图.vsd b/模型/讨论区功能用例图.vsd
new file mode 100644
index 0000000..fe7ac9e
Binary files /dev/null and b/模型/讨论区功能用例图.vsd differ
diff --git a/模型/讨论区功能顺序图.vsd b/模型/讨论区功能顺序图.vsd
new file mode 100644
index 0000000..2d6e9b2
Binary files /dev/null and b/模型/讨论区功能顺序图.vsd differ
diff --git a/模型/软件推荐功能用例图.vsd b/模型/软件推荐功能用例图.vsd
new file mode 100644
index 0000000..c04e548
Binary files /dev/null and b/模型/软件推荐功能用例图.vsd differ
diff --git a/模型/软件推荐功能顺序图.vsd b/模型/软件推荐功能顺序图.vsd
new file mode 100644
index 0000000..f6dfe61
Binary files /dev/null and b/模型/软件推荐功能顺序图.vsd differ
diff --git a/模型/预定功能用例图.vsd b/模型/预定功能用例图.vsd
new file mode 100644
index 0000000..e135e52
Binary files /dev/null and b/模型/预定功能用例图.vsd differ
diff --git a/模型/预订功能用例图.vsd b/模型/预订功能用例图.vsd
new file mode 100644
index 0000000..c980ee1
Binary files /dev/null and b/模型/预订功能用例图.vsd differ