2 Commits 89c47211f7 ... 9e72311af7

Author SHA1 Message Date
  Junqin Wang 9e72311af7 Merge branch 'master' of http://git.dashgame.com/fenix/sheishuoAPP 8 years ago
  Junqin Wang 9be5e440bb sync 8 years ago
66 changed files with 1478 additions and 119 deletions
  1. 10 2
      app/AndroidManifest.xml
  2. BIN
      app/res/drawable-hdpi/friends_add_ico.png
  3. BIN
      app/res/drawable-hdpi/friends_contacts_list_ico.png
  4. BIN
      app/res/drawable-hdpi/group_country.png
  5. BIN
      app/res/drawable-hdpi/group_district.png
  6. BIN
      app/res/drawable-hdpi/group_province_city.png
  7. BIN
      app/res/drawable-mdpi/friends_add_ico.png
  8. BIN
      app/res/drawable-mdpi/friends_contacts_list_ico.png
  9. BIN
      app/res/drawable-mdpi/group_country.png
  10. BIN
      app/res/drawable-mdpi/group_district.png
  11. BIN
      app/res/drawable-mdpi/group_province_city.png
  12. BIN
      app/res/drawable-xhdpi/friends_add_ico.png
  13. BIN
      app/res/drawable-xhdpi/friends_contacts_list_ico.png
  14. BIN
      app/res/drawable-xhdpi/group_country.png
  15. BIN
      app/res/drawable-xhdpi/group_district.png
  16. BIN
      app/res/drawable-xhdpi/group_province_city.png
  17. BIN
      app/res/drawable-xxhdpi/friends_add_ico.png
  18. BIN
      app/res/drawable-xxhdpi/friends_contacts_list_ico.png
  19. BIN
      app/res/drawable-xxhdpi/group_country.png
  20. BIN
      app/res/drawable-xxhdpi/group_district.png
  21. BIN
      app/res/drawable-xxhdpi/group_province_city.png
  22. BIN
      app/res/drawable-xxxhdpi/friends_add_ico.png
  23. BIN
      app/res/drawable-xxxhdpi/friends_contacts_list_ico.png
  24. BIN
      app/res/drawable-xxxhdpi/group_country.png
  25. BIN
      app/res/drawable-xxxhdpi/group_district.png
  26. BIN
      app/res/drawable-xxxhdpi/group_province_city.png
  27. 47 0
      app/res/layout/area_group_create_group.xml
  28. 17 0
      app/res/layout/area_group_more_groups_in_the_area.xml
  29. 7 5
      app/res/layout/base_toolbar.xml
  30. 2 1
      app/res/layout/contacts_list_activity.xml
  31. 27 0
      app/res/layout/friends_add_new_friend.xml
  32. 39 0
      app/res/layout/trade_change_priority.xml
  33. 3 3
      app/res/menu/main_botton_navi_menu.xml
  34. 12 0
      app/res/menu/tab_friends_menu.xml
  35. 6 0
      app/res/values/ids.xml
  36. 2 1
      app/res/values/strings.xml
  37. 5 3
      app/src/com/sheishuo/app/cache/AccountCache.java
  38. 4 1
      app/src/com/sheishuo/app/common/views/BaseToolbar.java
  39. 76 0
      app/src/com/sheishuo/app/core_module/friends/activity/AddNewFriend.java
  40. 200 0
      app/src/com/sheishuo/app/core_module/friends/activity/ContactsListActivity.java
  41. 0 54
      app/src/com/sheishuo/app/core_module/recent_contacts/activity/ContactsListActivity.java
  42. 19 0
      app/src/com/sheishuo/app/core_module/sheishuo/view/ui/CreateNewGroupActivity.java
  43. 123 0
      app/src/com/sheishuo/app/core_module/sheishuo/view/ui/MoreGroupsInTheAreaActivity.java
  44. 4 0
      app/src/com/sheishuo/app/core_module/trade/model/TradeModel.java
  45. 0 1
      app/src/com/sheishuo/app/core_module/trade/presenter/TradePresenter.java
  46. 22 0
      app/src/com/sheishuo/app/core_module/trade/view/adapter/TradeItemAdapter.java
  47. 106 0
      app/src/com/sheishuo/app/core_module/trade/view/ui/activity/TradeChangePriorityActivity.java
  48. 1 0
      app/src/com/sheishuo/app/login/LoginActivity.java
  49. 6 1
      app/src/com/sheishuo/app/main/activity/MainActivity.java
  50. 33 19
      app/src/com/sheishuo/app/main/adapter/AreaGroupsAdapter.java
  51. 29 6
      app/src/com/sheishuo/app/main/fragment/AreaGroupsFragment.java
  52. 8 0
      app/src/com/sheishuo/app/main/fragment/ChatRoomListFragment.java
  53. 9 0
      app/src/com/sheishuo/app/main/fragment/HomeFragment.java
  54. 52 17
      app/src/com/sheishuo/app/main/fragment/SessionListFragment.java
  55. 47 3
      app/src/com/sheishuo/app/main/fragment/TradeListFragment.java
  56. 20 0
      app/src/com/sheishuo/app/uikit_implements/SheishuoUI.java
  57. 5 0
      uikit/AndroidManifest.xml
  58. 15 0
      uikit/res/drawable-hdpi/btn1_selector.xml
  59. 11 0
      uikit/res/drawable/rechage_button_selector.xml
  60. 7 0
      uikit/res/drawable/recharge_botton_unchecked.xml
  61. 7 0
      uikit/res/drawable/recharge_button_checked.xml
  62. 115 0
      uikit/res/layout/gift_recharge_layout.xml
  63. 13 2
      uikit/res/values/colors.xml
  64. 23 0
      uikit/src/com/netease/nim/uikit/activity/GiftRechargeActivity.java
  65. 9 0
      uikit/src/com/netease/nim/uikit/session/module/gift/GiftPanel.java
  66. 337 0
      uikit/src/com/netease/nim/uikit/views/MutipleRadioGroup.java

+ 10 - 2
app/AndroidManifest.xml

@@ -114,6 +114,9 @@
             android:theme="@style/AppTheme.NoActionBar"
             android:windowSoftInputMode="adjustResize|stateHidden"/>
 
+        <!--地区群-->
+        <activity android:name=".core_module.sheishuo.view.ui.MoreGroupsInTheAreaActivity"
+            android:theme="@style/AppTheme.NoActionBar"/>
         <!--朋友圈相关-->
         <activity android:name=".core_module.circle.activity.NewTweetingActivity"
             android:theme="@style/AppTheme.NoActionBar"/>
@@ -122,11 +125,16 @@
         <activity android:name=".core_module.social_info.view.ui.activity.PersonalSettingsActivity"
             android:theme="@style/AppTheme.NoActionBar"/>
 
-        <!--交易帖详情-->
+        <!--交易帖相关Activity-->
         <activity android:name=".core_module.trade.view.ui.activity.TradeDetailActivity"
             android:theme="@style/AppTheme.NoActionBar"/>
+        <activity android:name=".core_module.trade.view.ui.activity.TradeChangePriorityActivity"
+            android:theme="@style/AppTheme.NoActionBar"/>
+
         <!--联系人界面-->
-        <activity android:name=".core_module.recent_contacts.activity.ContactsListActivity"
+        <activity android:name=".core_module.friends.activity.ContactsListActivity"
+            android:theme="@style/AppTheme.NoActionBar"/>
+        <activity android:name=".core_module.friends.activity.AddNewFriend"
             android:theme="@style/AppTheme.NoActionBar"/>
 
 

BIN
app/res/drawable-hdpi/friends_add_ico.png


BIN
app/res/drawable-hdpi/friends_contacts_list_ico.png


BIN
app/res/drawable-hdpi/group_country.png


BIN
app/res/drawable-hdpi/group_district.png


BIN
app/res/drawable-hdpi/group_province_city.png


BIN
app/res/drawable-mdpi/friends_add_ico.png


BIN
app/res/drawable-mdpi/friends_contacts_list_ico.png


BIN
app/res/drawable-mdpi/group_country.png


BIN
app/res/drawable-mdpi/group_district.png


BIN
app/res/drawable-mdpi/group_province_city.png


BIN
app/res/drawable-xhdpi/friends_add_ico.png


BIN
app/res/drawable-xhdpi/friends_contacts_list_ico.png


BIN
app/res/drawable-xhdpi/group_country.png


BIN
app/res/drawable-xhdpi/group_district.png


BIN
app/res/drawable-xhdpi/group_province_city.png


BIN
app/res/drawable-xxhdpi/friends_add_ico.png


BIN
app/res/drawable-xxhdpi/friends_contacts_list_ico.png


BIN
app/res/drawable-xxhdpi/group_country.png


BIN
app/res/drawable-xxhdpi/group_district.png


BIN
app/res/drawable-xxhdpi/group_province_city.png


BIN
app/res/drawable-xxxhdpi/friends_add_ico.png


BIN
app/res/drawable-xxxhdpi/friends_contacts_list_ico.png


BIN
app/res/drawable-xxxhdpi/group_country.png


BIN
app/res/drawable-xxxhdpi/group_district.png


BIN
app/res/drawable-xxxhdpi/group_province_city.png


+ 47 - 0
app/res/layout/area_group_create_group.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <com.sheishuo.app.common.views.BaseToolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/action_bar_height"
+        style="@style/fullToolbarStyle"
+        android:title="创建群组"
+        app:right_text="创建"/>
+
+    <android.support.design.widget.TextInputLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:hint="请输入群名称"
+        android:padding="8dp">
+        <EditText
+            android:id="@+id/create_group_name"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+    </android.support.design.widget.TextInputLayout>
+
+    <android.support.design.widget.TextInputLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="8dp">
+        <EditText
+            android:id="@+id/create_group_announcement"
+            android:layout_width="match_parent"
+            android:layout_height="256dp"
+            android:hint="请输入群公告"
+            android:gravity="start"/>
+    </android.support.design.widget.TextInputLayout>
+
+    <HorizontalScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+        <ImageView
+
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+    </HorizontalScrollView>
+
+</LinearLayout>

+ 17 - 0
app/res/layout/area_group_more_groups_in_the_area.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical" android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.sheishuo.app.common.views.BaseToolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/action_bar_height"
+        style="@style/fullToolbarStyle"
+        android:title="更多地区"/>
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/more_area_groups_recyclerview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</LinearLayout>

+ 7 - 5
app/res/layout/base_toolbar.xml

@@ -57,12 +57,14 @@
 
             <LinearLayout
                 android:id="@+id/toolbar_ico_layout"
-                android:layout_weight="2"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
                 android:visibility="gone"
-                android:gravity="center"/>
+                android:orientation="horizontal"
+                android:layout_gravity="end"
+                android:gravity="center"
+                android:layout_marginEnd="8dp"
+                android:layout_marginRight="8dp" />
         </FrameLayout>
     </android.support.v7.widget.Toolbar>
 </LinearLayout>

+ 2 - 1
app/res/layout/recent_contacts_list_activity.xml → app/res/layout/contacts_list_activity.xml

@@ -6,7 +6,8 @@
         android:id="@+id/toolbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        style="@style/fullToolbarStyle"/>
+        style="@style/fullToolbarStyle"
+        android:title="通讯录"/>
     <LinearLayout
         android:id="@+id/recent_contacts_list_layout"
         android:layout_width="match_parent"

+ 27 - 0
app/res/layout/friends_add_new_friend.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical" android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <com.sheishuo.app.common.views.BaseToolbar
+        android:title="添加好友"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/action_bar_height"
+        style="@style/fullToolbarStyle"/>
+
+    <EditText
+        android:id="@+id/friends_add_new_friend_ET"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="8dp"
+        android:layout_marginTop="16dp"
+        android:hint="请输入好友ID或者手机号"/>
+    <Button
+        android:id="@+id/friends_add_new_friend_btn"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:textColor="@color/white"
+        android:text="添加好友"
+        android:background="@drawable/btn1_selector"
+        android:layout_marginTop="8dp"/>
+</LinearLayout>

+ 39 - 0
app/res/layout/trade_change_priority.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">.
+    <com.sheishuo.app.common.views.BaseToolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/action_bar_height"
+        style="@style/fullToolbarStyle"
+        android:title="修改置顶"
+        app:right_text="确定"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="horizontal"
+        android:padding="8dp"
+        android:layout_gravity="center">
+        <SeekBar
+            android:id="@+id/trade_change_priority_seekBar"
+            android:layout_weight="9"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:max="100"
+            android:progress="1" />
+        <TextView
+            android:id="@+id/trade_change_priority_tv"
+            android:layout_weight="1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="x 1 国家道具"
+            android:layout_gravity="center"/>
+    </LinearLayout>
+
+
+
+</LinearLayout>

+ 3 - 3
app/res/menu/main_botton_navi_menu.xml

@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:id="@+id/main_navi_groups"
-        android:title="谁说"
+        android:title="@string/app_name"
         android:icon="@drawable/bottom_navi_item_01_selector"/>
     <item android:id="@+id/main_navi_friends"
-        android:title="朋友"
+        android:title="@string/main_tab_friends"
         android:icon="@drawable/_02_unchecked"/>
     <item android:id="@+id/main_navi_trade"
-        android:title="便民帖"
+        android:title="@string/main_tab_trade"
         android:icon="@drawable/_03_unchecked"/>
     <item android:id="@+id/main_navi_circle_of_friends"
         android:title="朋友圈"

+ 12 - 0
app/res/menu/tab_friends_menu.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item android:id="@+id/tab_friends_menu_contacts"
+        android:title="通讯录"
+        android:icon="@drawable/friends_contacts"
+        app:showAsAction="ifRoom"/>
+    <item android:id="@+id/tab_friends_menu_add"
+        android:title="添加好友"
+        android:icon="@drawable/friends_add_ico"
+        app:showAsAction="ifRoom"/>
+</menu>

+ 6 - 0
app/res/values/ids.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <item name="flag_trade_id" type="id"/>
+    <item name="flag_trade_priority" type="id"/>
+    <item name="flag_trade_priority_type" type="id"/>
+</resources>

+ 2 - 1
app/res/values/strings.xml

@@ -5,8 +5,9 @@
     <string name="hello_world">Hello world!</string>
     <string name="empty"></string>
     <string name="main_tab_groups">聊天室</string>
-    <string name="main_tab_trade">便民帖</string>
+    <string name="main_tab_trade">快讯</string>
     <string name="main_tab_circleoffriends">朋友圈</string>
+    <string name="main_tab_friends">朋友</string>
     <string name="main_tab_mine">我的</string>
     <string name="main_tab_session">会话</string>
     <string name="main_tab_contact">通讯录</string>

+ 5 - 3
app/src/com/sheishuo/app/cache/AccountCache.java

@@ -13,13 +13,15 @@ public class AccountCache{
 
     public static void setCache(LoginBean.DBean account){
         AccountCache.account =account;
-
-        //同时更改UIKit中的缓存
-        UIKitCache.setAccount(new Gson().toJson(account));
     }
 
     public static LoginBean.DBean getAccount(){
         return account;
     }
 
+    public static void sync(){
+        //同步UIKit中的缓存
+        UIKitCache.setAccount(new Gson().toJson(account));
+    }
+
 }

+ 4 - 1
app/src/com/sheishuo/app/common/views/BaseToolbar.java

@@ -5,6 +5,7 @@ import android.support.annotation.ColorInt;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.Toolbar;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.FrameLayout;
@@ -101,6 +102,7 @@ public class BaseToolbar extends Toolbar {
 
     public void init(){
         this.setVisibility(VISIBLE);
+        indexIco.setVisibility(GONE);
         titleTV.setVisibility(INVISIBLE);
         leftTV.setVisibility(INVISIBLE);
         rightTV.setVisibility(INVISIBLE);
@@ -201,7 +203,8 @@ public class BaseToolbar extends Toolbar {
 
         public BaseToolbar.Builder addIcoButtonClickListener(int index,IcoBtnClickListener listener){
                 this.listener = listener;
-                toolbar.getIcoLayout().getChildAt(0).setOnClickListener(this);
+                toolbar.getIcoLayout().getChildAt(index).setOnClickListener(this);
+                Log.e("BaseToolbar",toolbar.getIcoLayout().getChildCount() + "   index " + index);
                 return this;
         }
 

+ 76 - 0
app/src/com/sheishuo/app/core_module/friends/activity/AddNewFriend.java

@@ -0,0 +1,76 @@
+package com.sheishuo.app.core_module.friends.activity;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.sheishuo.app.R;
+import com.sheishuo.app.common.views.BaseToolbar;
+import com.sheishuo.app.uikit_implements.SheishuoUI;
+
+/**
+ * Created by KN on 2017/8/16.
+ */
+
+public class AddNewFriend extends SheishuoUI {
+
+
+    private String TAG = this.getClass().getSimpleName();
+    private Context context = this;
+    private BaseToolbar toolbar;
+    private EditText idOrTelTV;
+    private Button addFriendBtn;
+    private Toast toast;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.friends_add_new_friend);
+        findViews();
+        init();
+    }
+
+    void findViews(){
+        toolbar = findView(R.id.toolbar);
+        idOrTelTV  = findView(R.id.friends_add_new_friend_ET);
+        addFriendBtn = findView(R.id.friends_add_new_friend_btn);
+    }
+
+
+    void init(){
+        addFriendBtn.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (idOrTelTV.getText().toString().trim().isEmpty()){
+                    showToast("请填写用户ID或者手机号");
+                }else {
+                    showToast("暂未对接搜索接口");
+                }
+            }
+        });
+    }
+
+
+
+
+    /******************公开调用方法*************************/
+
+    public void showToast(final String str){
+        getHandler().post(new Runnable() {
+            @Override
+            public void run() {
+                if (toast == null){
+                    toast = Toast.makeText(context,str,Toast.LENGTH_SHORT);
+                }else {
+                    toast.setText(str);
+                }
+
+                toast.show();
+            }
+        });
+    }
+}

+ 200 - 0
app/src/com/sheishuo/app/core_module/friends/activity/ContactsListActivity.java

@@ -0,0 +1,200 @@
+package com.sheishuo.app.core_module.friends.activity;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.netease.nim.uikit.common.activity.UI;
+import com.netease.nim.uikit.contact.ContactsCustomization;
+import com.netease.nim.uikit.contact.ContactsFragment;
+import com.netease.nim.uikit.contact.core.item.AbsContactItem;
+import com.netease.nim.uikit.contact.core.item.ItemTypes;
+import com.netease.nim.uikit.contact.core.model.ContactDataAdapter;
+import com.netease.nim.uikit.contact.core.viewholder.AbsContactViewHolder;
+import com.sheishuo.app.R;
+import com.sheishuo.app.cache.AccountCache;
+import com.sheishuo.app.common.views.BaseToolbar;
+import com.sheishuo.app.contact.activity.BlackListActivity;
+import com.sheishuo.app.main.activity.RobotListActivity;
+import com.sheishuo.app.main.activity.SystemMessageActivity;
+import com.sheishuo.app.main.activity.TeamListActivity;
+import com.sheishuo.app.session.SessionHelper;
+import com.sheishuo.app.uikit_implements.SheishuoUI;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by KN on 2017/7/28.
+ */
+
+public class ContactsListActivity extends SheishuoUI {
+
+    private LinearLayout layout;
+    private FragmentManager manager = getSupportFragmentManager();
+    private FragmentTransaction transaction;
+    private BaseToolbar toolbar;
+    private ContactsFragment fragment;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.contacts_list_activity);
+        findViews();
+        init();
+    }
+
+    private void findViews() {
+        toolbar = findView(R.id.toolbar);
+        layout = findView(R.id.recent_contacts_list_layout);
+    }
+
+
+    private void init() {
+        initToolbar();
+        addContactFragment();
+    }
+
+
+    private void initToolbar() {
+        toolbar.init();
+        toolbar.setTitle("联系人");
+    }
+
+    private void addContactFragment() {
+        fragment = new ContactsFragment();
+        fragment.setContainerId(R.id.recent_contacts_list_layout);
+
+        UI activity = this;
+
+        // 如果是activity从堆栈恢复,FM中已经存在恢复而来的fragment,此时会使用恢复来的,而new出来这个会被丢弃掉
+        fragment = (ContactsFragment) activity.addFragment(fragment);
+
+        // 功能项定制
+        fragment.setContactsCustomization(new ContactsCustomization() {
+            @Override
+            public Class<? extends AbsContactViewHolder<? extends AbsContactItem>> onGetFuncViewHolderClass() {
+                return FuncItem.FuncViewHolder.class;
+            }
+
+            @Override
+            public List<AbsContactItem> onGetFuncItems() {
+                return FuncItem.provide();
+            }
+
+            @Override
+            public void onFuncItemClick(AbsContactItem item) {
+                FuncItem.handle(ContactsListActivity.this, item);
+            }
+        });
+    }
+
+
+    final static class FuncItem extends AbsContactItem {
+        static final FuncItem VERIFY = new FuncItem();
+        static final FuncItem ROBOT = new FuncItem();
+        static final FuncItem NORMAL_TEAM = new FuncItem();
+        static final FuncItem ADVANCED_TEAM = new FuncItem();
+        static final FuncItem BLACK_LIST = new FuncItem();
+        static final FuncItem MY_COMPUTER = new FuncItem();
+
+        @Override
+        public int getItemType() {
+            return ItemTypes.FUNC;
+        }
+
+        @Override
+        public String belongsGroup() {
+            return null;
+        }
+
+        public static final class FuncViewHolder extends AbsContactViewHolder<FuncItem> {
+            private ImageView image;
+            private TextView funcName;
+            private TextView unreadNum;
+
+            @Override
+            public View inflate(LayoutInflater inflater) {
+                View view = inflater.inflate(R.layout.func_contacts_item, null);
+                this.image = (ImageView) view.findViewById(R.id.img_head);
+                this.funcName = (TextView) view.findViewById(R.id.tv_func_name);
+                this.unreadNum = (TextView) view.findViewById(R.id.tab_new_msg_label);
+                return view;
+            }
+
+            @Override
+            public void refresh(ContactDataAdapter contactAdapter, int position, FuncItem item) {
+                if (item == VERIFY) {
+                    funcName.setText("新的朋友");
+                    image.setImageResource(R.drawable.icon_verify_remind);
+                    image.setScaleType(ImageView.ScaleType.FIT_XY);
+                }
+//                else if (item == NORMAL_TEAM) {
+//                    funcName.setText("讨论组");
+//                    image.setImageResource(R.drawable.ic_secretary);
+//                }
+                else if (item == ADVANCED_TEAM) {
+                    funcName.setText("群组");
+                    image.setImageResource(R.drawable.ic_advanced_team);
+                }
+//                else if (item == BLACK_LIST) {
+//                    funcName.setText("黑名单");
+//                    image.setImageResource(R.drawable.ic_black_list);
+//                }
+//                else if (item == MY_COMPUTER) {
+//                    funcName.setText("我的电脑");
+//                    image.setImageResource(R.drawable.ic_my_computer);
+//                }
+
+                if (item != VERIFY) {
+                    image.setScaleType(ImageView.ScaleType.FIT_XY);
+                    unreadNum.setVisibility(View.GONE);
+                }
+            }
+
+            private void updateUnreadNum(int unreadCount) {
+                // 2.*版本viewholder复用问题
+                if (unreadCount > 0 && funcName.getText().toString().equals("验证提醒")) {
+                    unreadNum.setVisibility(View.VISIBLE);
+                    unreadNum.setText("" + unreadCount);
+                } else {
+                    unreadNum.setVisibility(View.GONE);
+                }
+            }
+        }
+
+        static List<AbsContactItem> provide() {
+            List<AbsContactItem> items = new ArrayList<AbsContactItem>();
+            items.add(VERIFY);
+//            items.add(ROBOT);
+//            items.add(NORMAL_TEAM);
+            items.add(ADVANCED_TEAM);
+//            items.add(BLACK_LIST);
+//            items.add(MY_COMPUTER);
+
+            return items;
+        }
+
+        static void handle(Context context, AbsContactItem item) {
+            if (item == VERIFY) {
+                SystemMessageActivity.start(context);
+            } else if (item == ROBOT) {
+                RobotListActivity.start(context);
+            } else if (item == NORMAL_TEAM) {
+                TeamListActivity.start(context, ItemTypes.TEAMS.NORMAL_TEAM);
+            } else if (item == ADVANCED_TEAM) {
+                TeamListActivity.start(context, ItemTypes.TEAMS.ADVANCED_TEAM);
+            } else if (item == MY_COMPUTER) {
+                SessionHelper.startP2PSession(context, AccountCache.getAccount().getId());
+            } else if (item == BLACK_LIST) {
+                BlackListActivity.start(context);
+            }
+        }
+    }
+}

+ 0 - 54
app/src/com/sheishuo/app/core_module/recent_contacts/activity/ContactsListActivity.java

@@ -1,54 +0,0 @@
-package com.sheishuo.app.core_module.recent_contacts.activity;
-
-import android.os.Bundle;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.widget.LinearLayout;
-
-import com.netease.nim.uikit.contact.ContactsFragment;
-import com.sheishuo.app.R;
-import com.sheishuo.app.common.views.BaseToolbar;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
-
-/**
- * Created by KN on 2017/7/28.
- */
-
-public class ContactsListActivity extends SheishuoUI {
-
-    private LinearLayout layout;
-    private FragmentManager manager = getSupportFragmentManager();
-    private FragmentTransaction transaction;
-    private BaseToolbar toolbar;
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.recent_contacts_list_activity);
-        findViews();
-        init();
-    }
-
-    private void findViews(){
-        toolbar = findView(R.id.toolbar);
-        layout = findView(R.id.recent_contacts_list_layout);
-    }
-
-
-    private void init(){
-        initToolbar();
-        if (manager != null){
-            ContactsFragment fragment  = new ContactsFragment();
-            transaction = manager.beginTransaction();
-            transaction.add(R.id.recent_contacts_list_layout,fragment);
-            transaction.commit();
-        }
-
-    }
-
-
-
-    private void initToolbar(){
-        toolbar.init();
-        toolbar.setTitle("联系人");
-    }
-}

+ 19 - 0
app/src/com/sheishuo/app/core_module/sheishuo/view/ui/CreateNewGroupActivity.java

@@ -0,0 +1,19 @@
+package com.sheishuo.app.core_module.sheishuo.view.ui;
+
+import android.os.Bundle;
+
+import com.sheishuo.app.uikit_implements.SheishuoUI;
+
+/**
+ * Created by KN on 2017/8/16.
+ */
+
+public class CreateNewGroupActivity extends SheishuoUI {
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+    }
+}

+ 123 - 0
app/src/com/sheishuo/app/core_module/sheishuo/view/ui/MoreGroupsInTheAreaActivity.java

@@ -0,0 +1,123 @@
+package com.sheishuo.app.core_module.sheishuo.view.ui;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.View;
+
+import com.netease.nim.uikit.NimUIKit;
+import com.netease.nimlib.sdk.NIMClient;
+import com.netease.nimlib.sdk.team.TeamService;
+import com.sheishuo.app.R;
+import com.sheishuo.app.common.util.location.CityDataHelper;
+import com.sheishuo.app.common.util.net.INet;
+import com.sheishuo.app.common.util.net.NetImpl;
+import com.sheishuo.app.common.util.net.ResponseCallback;
+import com.sheishuo.app.common.views.BaseToolbar;
+import com.sheishuo.app.main.adapter.AreaGroupsAdapter;
+import com.sheishuo.app.main.adapter.OnItemClickListener;
+import com.sheishuo.app.uikit_implements.SheishuoUI;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by KN on 2017/8/16.
+ */
+
+public class MoreGroupsInTheAreaActivity extends SheishuoUI {
+
+    private Context context = this;
+    private BaseToolbar toolbar;
+    private RecyclerView recyclerView;
+    private AreaGroupsAdapter adapter;
+    private LinearLayoutManager layoutManager = new LinearLayoutManager(context);
+    private String province,city;
+
+    private INet net = new NetImpl();
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.area_group_more_groups_in_the_area);
+        Intent intent = getIntent();
+        province = intent.getStringExtra("province");
+        city = intent.getStringExtra("city");
+
+        Log.e("more Rooms", province + "    " + city);
+        findViews();
+        init();
+    }
+
+    void findViews(){
+        toolbar = findView(R.id.toolbar);
+        recyclerView = findView(R.id.more_area_groups_recyclerview);
+    }
+
+    void init(){
+        List<String> districts = new ArrayList<>();
+        districts.addAll(CityDataHelper.getArea(city.replace("市","")));
+        adapter = new AreaGroupsAdapter(context,new ArrayList<String>());
+        recyclerView.setLayoutManager(layoutManager);
+        recyclerView.setAdapter(adapter);
+        adapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(View view) {
+                String groupId = (String) view.getTag();
+                if (!NIMClient.getService(TeamService.class).queryTeamBlock(groupId).isMyTeam()) {
+                    NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群");
+                }
+                NimUIKit.startTeamSession(context, groupId);
+
+            }
+        });
+
+        for (final String district : districts){
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    net.updateLocation(province, city, district, new ResponseCallback() {
+                        @Override
+                        public void onSuccess(Object object) {
+                            try {
+                                String resultStr = (String) object;
+                                JSONObject jsonObject = new JSONObject(resultStr);
+                                String districtRoomId = jsonObject.getJSONObject("d").getString("district");
+                                updateGroups(districtRoomId);
+
+                            } catch (JSONException e) {
+                                e.printStackTrace();
+                                showToast(context,"加载群失败");
+                            }
+                        }
+
+                        @Override
+                        public void onFailed() {
+                        }
+                    });
+                }
+            }).start();
+        }
+
+    }
+
+
+
+
+    public void updateGroups(final String districtRoomId){
+        getHandler().post(new Runnable() {
+            @Override
+            public void run() {
+                adapter.addGroup(districtRoomId);
+            }
+        });
+    }
+
+
+
+}

+ 4 - 0
app/src/com/sheishuo/app/core_module/trade/model/TradeModel.java

@@ -153,4 +153,8 @@ public class TradeModel {
             }
         }).start();
     }
+
+
+
+
 }

+ 0 - 1
app/src/com/sheishuo/app/core_module/trade/presenter/TradePresenter.java

@@ -42,5 +42,4 @@ public class TradePresenter {
         fragment.showToast(str);
     }
 
-
 }

+ 22 - 0
app/src/com/sheishuo/app/core_module/trade/view/adapter/TradeItemAdapter.java

@@ -25,6 +25,7 @@ import com.sheishuo.app.common.util.img.ImgUtil;
 import com.sheishuo.app.common.views.GridViewAdapter;
 import com.sheishuo.app.common.views.ImgGridView;
 import com.sheishuo.app.common.views.PartlyHighLightTextView;
+import com.sheishuo.app.core_module.trade.view.ui.activity.TradeChangePriorityActivity;
 import com.sheishuo.app.login.beans.LoginBean;
 import com.sheishuo.app.main.fragment.TradeListFragment;
 
@@ -108,6 +109,15 @@ public class TradeItemAdapter extends RecyclerView.Adapter<TradeItemAdapter.Trad
                 break;
         }
 
+        //判断是否为自己发布的交易帖,如果是才能编辑置顶加权
+        if (bean.getUser_id().equals(AccountCache.getAccount().getId())){
+            holder.priority.setTag(R.id.flag_trade_id,bean.getId());
+            holder.priority.setTag(R.id.flag_trade_priority,bean.getPriority());
+            holder.priority.setTag(R.id.flag_trade_priority_type,bean.getPriority_type());
+            holder.priority.setOnClickListener(this);
+        }
+
+
         //判断是否已加关注
         if (1 == bean.getFollow()){
             Glide.with(context).load(R.drawable.trade_followed).into(holder.followImg);
@@ -243,6 +253,18 @@ public class TradeItemAdapter extends RecyclerView.Adapter<TradeItemAdapter.Trad
         notifyDataSetChanged();
     }
 
+    public void updateTradePriority(String id,String priority){
+        Log.e("adapter","收到置顶修改请求");
+        Log.e("adapter",id +  "   " + priority);
+        for (TradeBean.DBean.ListBean bean : data){
+            if (bean.getId().equals(id)){
+                bean.setPriority(priority);
+            }
+        }
+
+        notifyDataSetChanged();
+    }
+
     class TradeItemViewHolder extends RecyclerView.ViewHolder{
         private CardView layout;
         private ImageView avatarImg,followImg;

+ 106 - 0
app/src/com/sheishuo/app/core_module/trade/view/ui/activity/TradeChangePriorityActivity.java

@@ -0,0 +1,106 @@
+package com.sheishuo.app.core_module.trade.view.ui.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.SeekBar;
+import android.widget.TextView;
+
+import com.sheishuo.app.R;
+import com.sheishuo.app.common.views.BaseToolbar;
+import com.sheishuo.app.core_module.trade.view.adapter.TradeItemAdapter;
+import com.sheishuo.app.uikit_implements.SheishuoUI;
+
+/**
+ * Created by KN on 2017/8/16.
+ */
+
+public class TradeChangePriorityActivity extends SheishuoUI {
+
+    //FLAGS
+    public static final int TRADE_CHANGE_PRIORITY = 3300;
+    public static final String TRADE_PRIORITY = "3301",TRADE_PRIORITY_TYPE = "3302";
+
+
+    private BaseToolbar toolbar;
+    private SeekBar seekBar;
+    private TextView priorityNumTv;
+    private String priority,priorityType,type,nowPriority;
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.trade_change_priority);
+        Bundle bundle = getIntent().getExtras();
+        priority = bundle.getString(TRADE_PRIORITY);
+        priorityType = bundle.getString(TRADE_PRIORITY_TYPE);
+        findViews();
+        init();
+    }
+
+    void findViews(){
+        toolbar = findView(R.id.toolbar);
+        seekBar = findView(R.id.trade_change_priority_seekBar);
+        priorityNumTv = findView(R.id.trade_change_priority_tv);
+
+    }
+
+    void init(){
+        toolbar.getRightTV().setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent();
+                Bundle data = new Bundle();
+                data.putString(TRADE_PRIORITY,nowPriority);
+                data.putString(TRADE_PRIORITY_TYPE,priorityType);
+                intent.putExtras(data);
+                setResult(TRADE_CHANGE_PRIORITY,intent);
+                finish();
+            }
+        });
+
+        switch (priorityType){
+            case TradeItemAdapter.PRIORITY_DISTRICT:
+                type = "地区道具";
+                break;
+            case TradeItemAdapter.PRIORITY_CITY:
+                type = "城市道具";
+                break;
+            case TradeItemAdapter.PRIORITY_PROVINCE:
+                type = "省份道具";
+                break;
+            case TradeItemAdapter.PRIORITY_COUNTRY:
+                type = "国家道具";
+                break;
+        }
+
+
+        priorityNumTv.setText("x"+ priority + "  " + type);
+
+
+
+        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+            @Override
+            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+                if (progress < 1) seekBar.setProgress(1);
+                nowPriority = String.valueOf(Integer.valueOf(priority) + progress);
+                priorityNumTv.setText("x"+ nowPriority + "(+" + progress +  ")   " + type);
+
+            }
+
+            @Override
+            public void onStartTrackingTouch(SeekBar seekBar) {
+
+            }
+
+            @Override
+            public void onStopTrackingTouch(SeekBar seekBar) {
+
+            }
+        });
+
+    }
+
+
+
+
+}

+ 1 - 0
app/src/com/sheishuo/app/login/LoginActivity.java

@@ -98,6 +98,7 @@ public class LoginActivity extends SheishuoUI implements View.OnClickListener{
 
                 //将用户信息放入缓存
                 AccountCache.setCache(bean.getD());
+                AccountCache.sync();
 
 
 

+ 6 - 1
app/src/com/sheishuo/app/main/activity/MainActivity.java

@@ -36,6 +36,7 @@ import com.sheishuo.app.chatroom.helper.ChatRoomHelper;
 import com.sheishuo.app.config.preference.UserPreferences;
 import com.sheishuo.app.contact.activity.AddFriendActivity;
 import com.sheishuo.app.core_module.location.LocationSelectActivity;
+import com.sheishuo.app.core_module.trade.view.ui.activity.TradeChangePriorityActivity;
 import com.sheishuo.app.login.LoginActivity;
 import com.sheishuo.app.login.LogoutHelperBak;
 import com.sheishuo.app.main.fragment.HomeFragment;
@@ -264,7 +265,11 @@ public class MainActivity extends SheishuoUI {
         }else if(resultCode == LocationSelectActivity.LOCATION_SELECTED){
             //地区选择
             mainFragment.onActivityResult(requestCode,resultCode,data);
-        } else if (resultCode == Activity.RESULT_OK) {
+        }else if(resultCode == TradeChangePriorityActivity.TRADE_CHANGE_PRIORITY){
+            //修改置顶权限
+            mainFragment.onActivityResult(requestCode,resultCode,data);
+        }else if (resultCode == Activity.RESULT_OK) {
+
             if (requestCode == REQUEST_CODE_NORMAL) {
                 final ArrayList<String> selected = data.getStringArrayListExtra(ContactSelectActivity.RESULT_DATA);
                 if (selected != null && !selected.isEmpty()) {

+ 33 - 19
app/src/com/sheishuo/app/main/adapter/AreaGroupsAdapter.java

@@ -2,10 +2,8 @@ package com.sheishuo.app.main.adapter;
 
 import android.content.Context;
 import android.support.v7.widget.RecyclerView;
-import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.bumptech.glide.Glide;
@@ -23,22 +21,23 @@ import java.util.List;
  * Created by KN on 2017/7/18.
  */
 
-public class AreaGroupsAdapter  extends RecyclerView.Adapter<AreaGroupsAdapter.AreaGroupsViewHold> implements View.OnClickListener{
+public class AreaGroupsAdapter extends RecyclerView.Adapter<AreaGroupsAdapter.AreaGroupsViewHold> implements View.OnClickListener {
     private Context context;
     private List<String> groupIds;
     private OnItemClickListener listener;
-    public AreaGroupsAdapter(Context context, List<String> groupIds){
+
+    public AreaGroupsAdapter(Context context, List<String> groupIds) {
         this.context = context;
         this.groupIds = groupIds;
     }
 
-    public void setOnItemClickListener(OnItemClickListener listener){
+    public void setOnItemClickListener(OnItemClickListener listener) {
         this.listener = listener;
     }
 
     @Override
     public AreaGroupsViewHold onCreateViewHolder(ViewGroup parent, int viewType) {
-        View view = View.inflate(context, R.layout.area_group_item,null);
+        View view = View.inflate(context, R.layout.area_group_item, null);
         return new AreaGroupsViewHold(view);
     }
 
@@ -48,19 +47,29 @@ public class AreaGroupsAdapter  extends RecyclerView.Adapter<AreaGroupsAdapter.A
         final String groupId = groupIds.get(position);
         holder.layout.setTag(groupId);
 
-        $(groupId).setCallback(new RequestCallback<Team>() {
+        queryGroupInfo(groupId).setCallback(new RequestCallback<Team>() {
             @Override
             public void onSuccess(Team team) {
                 holder.groupName.setText(team.getName());
-                holder.groupMemberNum.setText(team.getMemberCount()+"人热聊中");
-                if (team.getIcon().isEmpty()){
-                    Glide.with(context).load(R.drawable.nim_avatar_group).into(holder.groupIco);
-                }else {
-                    Glide.with(context)
-                            .load(team.getIcon())
-                            .placeholder(R.drawable.nim_avatar_group)
-                            .into(holder.groupIco);
+                holder.groupMemberNum.setText(team.getMemberCount() + "人热聊中");
+
+                if (team.getName().equals("国家聊天室")) {
+                    Glide.with(context).load(R.drawable.group_country).into(holder.groupIco);
+                } else if (team.getName().contains("市") || team.getName().contains("省")) {
+                    Glide.with(context).load(R.drawable.group_province_city).into(holder.groupIco);
+                } else if (team.getName().contains("区") || team.getName().contains("县")) {
+                    Glide.with(context).load(R.drawable.group_district).into(holder.groupIco);
+                } else {
+                    if (team.getIcon().isEmpty()) {
+                        Glide.with(context).load(R.drawable.nim_avatar_group).into(holder.groupIco);
+                    } else {
+                        Glide.with(context)
+                                .load(team.getIcon())
+                                .placeholder(R.drawable.nim_avatar_group)
+                                .into(holder.groupIco);
+                    }
                 }
+
             }
 
             @Override
@@ -75,8 +84,12 @@ public class AreaGroupsAdapter  extends RecyclerView.Adapter<AreaGroupsAdapter.A
         });
 
 
+    }
 
 
+    public void addGroup(String groupId){
+        groupIds.add(groupId);
+        notifyDataSetChanged();
     }
 
     @Override
@@ -86,19 +99,20 @@ public class AreaGroupsAdapter  extends RecyclerView.Adapter<AreaGroupsAdapter.A
 
     @Override
     public void onClick(View v) {
-        if (listener != null){
+        if (listener != null) {
             listener.onItemClick(v);
         }
     }
 
-    private InvocationFuture<Team> $(String groupId){
+    private InvocationFuture<Team> queryGroupInfo(String groupId) {
         return NIMClient.getService(TeamService.class).queryTeam(groupId);
     }
 
-    class AreaGroupsViewHold extends RecyclerView.ViewHolder{
+    class AreaGroupsViewHold extends RecyclerView.ViewHolder {
         View layout;
         HeadImageView groupIco;
-        TextView groupName,groupMemberNum;
+        TextView groupName, groupMemberNum;
+
         public AreaGroupsViewHold(View itemView) {
             super(itemView);
             layout = itemView.findViewById(R.id.area_groups_layout);

+ 29 - 6
app/src/com/sheishuo/app/main/fragment/AreaGroupsFragment.java

@@ -6,6 +6,7 @@ import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.util.Log;
 import android.view.View;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import com.google.gson.Gson;
@@ -25,6 +26,7 @@ import com.sheishuo.app.common.util.net.NetInfo;
 import com.sheishuo.app.common.util.net.ResponseCallback;
 import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.core_module.location.LocationSelectActivity;
+import com.sheishuo.app.core_module.sheishuo.view.ui.MoreGroupsInTheAreaActivity;
 import com.sheishuo.app.login.beans.LoginBean;
 import com.sheishuo.app.main.activity.MainActivity;
 import com.sheishuo.app.main.adapter.AreaGroupsAdapter;
@@ -52,18 +54,17 @@ public class AreaGroupsFragment extends MainTabFragment {
 
     private AreaGroupsAdapter areaGroupsAdapter, nearbyGroupsAdapter;
 
+    private TextView moreAreaGroupsTV;
     private LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
     private LinearLayoutManager nearbyLayoutManager = new LinearLayoutManager(getActivity());
 
-
+    private String location = AccountCache.getAccount().getCity() + AccountCache.getAccount().getDistrict();
     private INet net = new NetImpl();
 
     @Override
     protected void onInit() {
         findViews();
-        loadGroups();
-        initToolbar();
-        loadGiftCache();
+        init();
 
     }
 
@@ -72,11 +73,31 @@ public class AreaGroupsFragment extends MainTabFragment {
         toolbar = (BaseToolbar) parent.getToolBar();
         areaGroupsRecyclerview = findView(R.id.area_groups_recyclerview);
         nearbyGroupsRecyclerview = findView(R.id.area_groups_nearby_recyclerview);
+        moreAreaGroupsTV = findView(R.id.area_groups_more_rooms_tv);
+    }
+
+
+    void init(){
+        loadGroups();
+        initToolbar();
+        loadGiftCache();
+
+        moreAreaGroupsTV.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent(getActivity(), MoreGroupsInTheAreaActivity.class);
+                intent.putExtra("province",AccountCache.getAccount().getProvince());
+                intent.putExtra("city",AccountCache.getAccount().getCity());
+
+                startActivity(intent);
+            }
+        });
     }
 
     //初始化Toolbar
     void initToolbar() {
         toolbar.init();
+        toolbar.getIndexIco().setVisibility(View.VISIBLE);
 
         toolbar.setTitle("谁说");
         LoginBean.DBean account = AccountCache.getAccount();
@@ -91,7 +112,7 @@ public class AreaGroupsFragment extends MainTabFragment {
         });
 
 
-        toolbar.setLeftText("重庆市北碚区");
+        toolbar.setLeftText(location);
         toolbar.getLeftTV().setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -101,6 +122,8 @@ public class AreaGroupsFragment extends MainTabFragment {
         });
     }
 
+
+
     //加载聊天室信息
     void loadGroups() {
         List<String> groupIds = new ArrayList<>();
@@ -295,7 +318,7 @@ public class AreaGroupsFragment extends MainTabFragment {
 
             updateAccountLocation(province,city,area);
 
-            String location = city + area;
+            location = city + area;
             if (location.length() > 6) {
                 location = location.substring(0, 6) + "...";
             }

+ 8 - 0
app/src/com/sheishuo/app/main/fragment/ChatRoomListFragment.java

@@ -1,5 +1,8 @@
 package com.sheishuo.app.main.fragment;
 
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
 import com.sheishuo.app.chatroom.fragment.ChatRoomsFragment;
 import com.sheishuo.app.main.model.MainTab;
 import com.sheishuo.app.R;
@@ -15,6 +18,11 @@ public class ChatRoomListFragment extends MainTabFragment {
     }
 
     @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
     protected void onInit() {
         // 采用静态集成,这里不需要做什么了
         fragment = (ChatRoomsFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.chat_rooms_fragment);

+ 9 - 0
app/src/com/sheishuo/app/main/fragment/HomeFragment.java

@@ -35,6 +35,7 @@ import com.sheishuo.app.common.ui.viewpager.FadeInOutPageTransformer;
 import com.sheishuo.app.common.ui.viewpager.PagerSlidingTabStrip;
 import com.sheishuo.app.common.views.BottomNavigationViewEx;
 import com.sheishuo.app.core_module.location.LocationSelectActivity;
+import com.sheishuo.app.core_module.trade.view.ui.activity.TradeChangePriorityActivity;
 import com.sheishuo.app.main.activity.MainActivity;
 import com.sheishuo.app.main.adapter.MainTabPagerAdapter;
 import com.sheishuo.app.main.helper.SystemMessageUnreadManager;
@@ -422,6 +423,14 @@ public class HomeFragment extends TFragment implements OnPageChangeListener, Rem
                 for (Fragment fragment : getFragmentManager().getFragments()) {
                     if (fragment instanceof AreaGroupsFragment)
                         fragment.onActivityResult(requestCode, resultCode, data);
+                }
+                break;
+
+            //修改置顶
+            case TradeChangePriorityActivity.TRADE_CHANGE_PRIORITY:
+                for (Fragment fragment : getFragmentManager().getFragments()) {
+                    if (fragment instanceof TradeListFragment)
+                        fragment.onActivityResult(requestCode, resultCode, data);
 
                 }
                 break;

+ 52 - 17
app/src/com/sheishuo/app/main/fragment/SessionListFragment.java

@@ -2,18 +2,10 @@ package com.sheishuo.app.main.fragment;
 
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.Toolbar;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
 import android.view.View;
-import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.bumptech.glide.Glide;
 import com.netease.nim.uikit.common.activity.UI;
 import com.netease.nim.uikit.common.util.log.LogUtil;
 import com.netease.nim.uikit.recent.RecentContactsCallback;
@@ -31,7 +23,8 @@ import com.netease.nimlib.sdk.msg.model.RecentContact;
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.config.preference.Preferences;
-import com.sheishuo.app.core_module.recent_contacts.activity.ContactsListActivity;
+import com.sheishuo.app.core_module.friends.activity.AddNewFriend;
+import com.sheishuo.app.core_module.friends.activity.ContactsListActivity;
 import com.sheishuo.app.login.LoginActivity;
 import com.sheishuo.app.login.LogoutHelperBak;
 import com.sheishuo.app.main.activity.GlobalSearchActivity;
@@ -76,6 +69,26 @@ public class SessionListFragment extends MainTabFragment {
     }
 
 
+//    @Override
+//    public void onCreate(@Nullable Bundle savedInstanceState) {
+//        super.onCreate(savedInstanceState);
+//        setHasOptionsMenu(true);
+//    }
+//
+//    @Override
+//    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+//        super.onCreateOptionsMenu(menu, inflater);
+//        inflater.inflate(R.menu.tab_friends_menu,menu);
+//    }
+//
+//    @Override
+//    public boolean onOptionsItemSelected(MenuItem item) {
+//        return super.onOptionsItemSelected(item);
+//
+//    }
+
+
+
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
@@ -133,22 +146,44 @@ public class SessionListFragment extends MainTabFragment {
 
     //初始化toolbar
     public void initToolbar(){
-        Log.e(TAG,"init toolbar");
         if (toolbar != null){
             toolbar.init();
             toolbar.setTitle("朋友");
             toolbar = new BaseToolbar.Builder()
                     .create(getActivity(),toolbar)
-                    .addIcoButton(R.drawable.friends_contacts)
-                    .addIcoButtonClickListener(0, new BaseToolbar.IcoBtnClickListener() {
-                        @Override
-                        public void onClick(View view) {
-                            startActivity(new Intent(getActivity(), ContactsListActivity.class));
-                        }
-                    })
+                    .addIcoButton(R.drawable.friends_contacts_list_ico)
+                    .addIcoButton(R.drawable.friends_add_ico)
                     .build();
+
+
+            toolbar.getIcoLayout().getChildAt(0).setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    startActivity(new Intent(getActivity(),ContactsListActivity.class));
+
+                }
+            });
+
+            toolbar.getIcoLayout().getChildAt(1).setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    startActivity(new Intent(getActivity(), AddNewFriend.class));
+                }
+            });
         }
 
+//        toolbar.getIcoLayout().setVisibility(View.VISIBLE);
+//        ImageView contactsImg = new ImageView(getActivity());
+//        ImageView addFriendsImg = new ImageView(getActivity());
+//
+//        Glide.with(getActivity()).load(R.drawable.friends_contacts_list_ico).into(contactsImg);
+//        Glide.with(getActivity()).load(R.drawable.friends_add_ico).into(addFriendsImg);
+//
+//        //toolbar.addView(contactsImg);
+//        toolbar.addView(addFriendsImg);
+
+        parent.setSupportActionBar(toolbar);
+
     }
 
     @Override

+ 47 - 3
app/src/com/sheishuo/app/main/fragment/TradeListFragment.java

@@ -1,5 +1,6 @@
 package com.sheishuo.app.main.fragment;
 
+import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.Nullable;
@@ -13,6 +14,7 @@ import android.view.MenuItem;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import com.sheishuo.app.R;
@@ -22,6 +24,7 @@ import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.core_module.trade.model.TradeModel;
 import com.sheishuo.app.core_module.trade.presenter.TradePresenter;
 import com.sheishuo.app.core_module.trade.view.adapter.TradeItemAdapter;
+import com.sheishuo.app.core_module.trade.view.ui.activity.TradeChangePriorityActivity;
 import com.sheishuo.app.core_module.trade.view.ui.activity.TradeDetailActivity;
 import com.sheishuo.app.main.activity.MainActivity;
 
@@ -57,14 +60,13 @@ public class TradeListFragment extends MainTabFragment {
     public int PAGE_TO_LOAD = 1;
     public int TYPE_TO_LOAD = TradeModel.TYPE_ALL;
     public int MENU_ITEM_CHECKED = R.id.trade_menu_all;
-
+    public TextView priorityTV = null;
+    public String priorityBeanId;
 
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setHasOptionsMenu(true);
-
-
     }
 
     @Override
@@ -150,6 +152,7 @@ public class TradeListFragment extends MainTabFragment {
     private void initToolbar(){
         toolbar.init();
         toolbar.setTitle(R.string.main_tab_trade);
+        toolbar.getIndexIco().setVisibility(View.VISIBLE);
         toolbar.setLeftText(AccountCache.getAccount().getCity() + AccountCache.getAccount().getDistrict());
         toolbar.getRightTV().setVisibility(View.GONE);
     }
@@ -180,6 +183,18 @@ public class TradeListFragment extends MainTabFragment {
                             presenter.unfollowTrade(id);
                         }
 
+                    }else if (view instanceof TextView){
+                        priorityTV = (TextView) view;
+                        priorityBeanId = (String) view.getTag(R.id.flag_trade_id);
+                        String priority = (String) view.getTag(R.id.flag_trade_priority);
+                        String priorityType = (String) view.getTag(R.id.flag_trade_priority_type);
+                        Intent intent = new Intent(getActivity(),TradeChangePriorityActivity.class);
+                        Bundle data = new Bundle();
+                        data.putString(TradeChangePriorityActivity.TRADE_PRIORITY,priority);
+                        data.putString(TradeChangePriorityActivity.TRADE_PRIORITY_TYPE,priorityType);
+                        intent.putExtras(data);
+                        startActivityForResult(intent,TradeChangePriorityActivity.TRADE_CHANGE_PRIORITY);
+
                     }else {
                         Log.e(TAG,"未识别View");
                     }
@@ -201,7 +216,36 @@ public class TradeListFragment extends MainTabFragment {
     }
 
 
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (TradeChangePriorityActivity.TRADE_CHANGE_PRIORITY == resultCode){
+            Log.e(TAG,"收到置顶修改请求");
+            Bundle bundle = data.getExtras();
+            String priority = bundle.getString(TradeChangePriorityActivity.TRADE_PRIORITY);
+            String priorityType = bundle.getString(TradeChangePriorityActivity.TRADE_PRIORITY_TYPE);
+
+//            switch (priority){
+//                case TradeItemAdapter.PRIORITY_DISTRICT:
+//                    priorityTypeStr = "地区";
+//                    break;
+//                case TradeItemAdapter.PRIORITY_CITY:
+//                    priorityTypeStr = "城市";
+//                    break;
+//                case TradeItemAdapter.PRIORITY_PROVINCE:
+//                    priorityTypeStr = "省份";
+//                    break;
+//                case TradeItemAdapter.PRIORITY_COUNTRY:
+//                    priorityTypeStr = "国家";
+//                    break;
+//
+//            }
+
+
+            if (adapter != null) adapter.updateTradePriority(priorityBeanId,priority);
 
+        }
+    }
 
     /**
      * ******************开放给Presenter调用的方法*******************

+ 20 - 0
app/src/com/sheishuo/app/uikit_implements/SheishuoUI.java

@@ -1,5 +1,6 @@
 package com.sheishuo.app.uikit_implements;
 
+import android.content.Context;
 import android.os.Build;
 import android.support.v7.widget.Toolbar;
 import android.view.Gravity;
@@ -8,6 +9,7 @@ import android.view.ViewGroup;
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.FrameLayout;
+import android.widget.Toast;
 
 import com.netease.nim.uikit.common.activity.UI;
 import com.sheishuo.app.R;
@@ -20,6 +22,7 @@ import static com.netease.nim.uikit.common.util.sys.ScreenUtil.getStatusBarHeigh
 
 public class SheishuoUI extends UI {
     Toolbar toolbar;
+    Toast toast;
 
     SheishuoToolbarOptions options;
 
@@ -57,4 +60,21 @@ public class SheishuoUI extends UI {
 
 
 
+    public void showToast(final Context context, final String str){
+        getHandler().post(new Runnable() {
+            @Override
+            public void run() {
+                if (toast == null){
+                    toast = Toast.makeText(context,str,Toast.LENGTH_SHORT);
+                }else {
+                    toast.setText(str);
+                }
+
+                toast.show();
+            }
+        });
+    }
+
+
+
 }

+ 5 - 0
uikit/AndroidManifest.xml

@@ -8,6 +8,11 @@
             android:name="com.netease.nim.uikit.glide.NIMGlideModule"
             android:value="GlideModule"/>
 
+
+
+        <activity android:name=".activity.GiftRechargeActivity"
+            android:theme="@style/AppTheme.NoActionBar"/>
+
         <!-- 会话窗口 -->
         <!-- UI组件中包含了语音选文字功能,该界面是全屏显示,为了视觉上的美观,该界面主题ActionBar使用Overlay模式。
              如果开发者不需要该功能或效果,使用普通主题即可。 同时,还需要将message_activity.xml这个layout中的根节点的paddingTop去掉。 -->

+ 15 - 0
uikit/res/drawable-hdpi/btn1_selector.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="false">
+        <shape android:shape="rectangle">
+            <corners android:radius="5dp" />
+            <solid android:color="@color/colorPrimary" />
+        </shape>
+    </item>
+    <item android:state_pressed="true" >
+        <shape>
+            <corners android:radius="5dp" />
+            <solid android:width="3dp" android:color="@color/colorPrimaryDark" />
+        </shape>
+    </item>
+</selector>

+ 11 - 0
uikit/res/drawable/rechage_button_selector.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_checked="true"
+        android:state_enabled="true"
+        android:drawable="@color/green_4DC0A4"/>
+
+    <item android:drawable="@color/GreyWhite"/>
+
+
+</selector>

+ 7 - 0
uikit/res/drawable/recharge_botton_unchecked.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <stroke android:color="#686868"
+        android:width="2dp"/>
+    <corners
+        android:radius="15dp"/>
+</shape>

+ 7 - 0
uikit/res/drawable/recharge_button_checked.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <stroke android:color="#18cf70"
+        android:width="2dp"/>
+    <corners
+        android:radius="15dp"/>
+</shape>

+ 115 - 0
uikit/res/layout/gift_recharge_layout.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <android.support.v7.widget.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/action_bar_height"
+        android:background="@color/colorPrimary"
+        app:title="充值"
+        app:titleTextColor="@color/GreyWhite" />
+
+
+    <com.netease.nim.uikit.views.MutipleRadioGroup
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:gravity="center">
+
+            <RadioButton
+                android:layout_width="128dp"
+                android:layout_height="96dp"
+                android:background="@drawable/rechage_button_selector"
+                android:button="@null"
+                android:gravity="center"
+                android:text="20元"
+                android:textSize="27sp" />
+
+            <RadioButton
+                android:layout_width="128dp"
+                android:layout_height="96dp"
+                android:gravity="center"
+                android:background="@drawable/rechage_button_selector"
+                android:text="30元"
+                android:textSize="27sp"
+                android:button="@null" />
+
+            <RadioButton
+                android:layout_width="128dp"
+                android:layout_height="96dp"
+                android:gravity="center"
+                android:text="50元"
+                android:background="@drawable/rechage_button_selector"
+                android:textSize="27sp"
+                android:button="@null" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:gravity="center">
+
+            <RadioButton
+                android:layout_width="128dp"
+                android:layout_height="96dp"
+                android:gravity="center"
+                android:background="@drawable/rechage_button_selector"
+                android:text="100元"
+                android:textSize="27sp"
+                android:button="@null" />
+
+            <RadioButton
+                android:layout_width="128dp"
+                android:layout_height="96dp"
+                android:gravity="center"
+                android:background="@drawable/rechage_button_selector"
+                android:text="200元"
+                android:textSize="27sp"
+                android:button="@null" />
+
+            <RadioButton
+                android:layout_width="128dp"
+                android:layout_height="96dp"
+                android:gravity="center"
+                android:background="@drawable/rechage_button_selector"
+                android:text="300元"
+                android:textSize="27sp"
+                android:button="@null" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <RadioButton
+                android:layout_width="128dp"
+                android:layout_height="96dp"
+                android:gravity="center"
+                android:background="@drawable/rechage_button_selector"
+                android:text="其他金额"
+                android:textSize="27sp"
+                android:button="@null"/>
+        </LinearLayout>
+    </com.netease.nim.uikit.views.MutipleRadioGroup>
+
+
+    <Button
+        android:id="@+id/gift_recharge_btn"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="立刻充值"
+        android:textColor="@color/GreyWhite"
+        android:background="@drawable/btn1_selector"/>
+
+</LinearLayout>

+ 13 - 2
uikit/res/values/colors.xml

@@ -1,10 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources>
 
-    <color name="transparent">#00000000</color>
+    <!--谁说-->
+    <color name="colorPrimary">#FFAA00</color>
+    <color name="colorPrimaryDark">#d78f00</color>
+    <color name="colorAccent">#FF4081</color>
     <color name="white">#FFFFFF</color>
-    <color name="light">#FFEEEEEE</color>
     <color name="black">#000000</color>
+    <color name="grey_light">#c4c4c4</color>
+    <color name="grey_light_light">#e6e6e6</color>
+    <color name="blue">#06a1f4</color>
+    <color name="transparent">#00000000</color>
+
+
+
+
+    <color name="light">#FFEEEEEE</color>
     <color name="grey">#333333</color>
     <color name="global_bg">#9000</color>
     <color name="color_green_01d9ae">#01D9AE</color>

+ 23 - 0
uikit/src/com/netease/nim/uikit/activity/GiftRechargeActivity.java

@@ -0,0 +1,23 @@
+package com.netease.nim.uikit.activity;
+
+import android.os.Bundle;
+import android.widget.RadioButton;
+
+import com.netease.nim.uikit.R;
+import com.netease.nim.uikit.common.activity.UI;
+import com.netease.nim.uikit.views.MutipleRadioGroup;
+
+/**
+ * Created by KN on 2017/8/16.
+ */
+
+public class GiftRechargeActivity extends UI {
+
+    private MutipleRadioGroup radioGroup;
+    private RadioButton rb1,rb2,rb3,rb4,rb5,rb6,rb7;
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.gift_recharge_layout);
+    }
+}

+ 9 - 0
uikit/src/com/netease/nim/uikit/session/module/gift/GiftPanel.java

@@ -3,6 +3,7 @@ package com.netease.nim.uikit.session.module.gift;
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.Intent;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -18,6 +19,7 @@ import android.widget.TextView;
 import com.netease.nim.uikit.NimUIKit;
 import com.netease.nim.uikit.R;
 import com.netease.nim.uikit.UIKitCache;
+import com.netease.nim.uikit.activity.GiftRechargeActivity;
 import com.netease.nim.uikit.common.activity.UI;
 import com.netease.nim.uikit.common.ui.dialog.DialogMaker;
 import com.netease.nim.uikit.session.extension.GiftAttachment;
@@ -161,6 +163,13 @@ public class GiftPanel extends LinearLayout{
 
 
 
+        rechargeTV.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                container.activity.startActivity(new Intent(container.activity, GiftRechargeActivity.class));
+            }
+        });
+
     }
 
     public void closePanel(){

+ 337 - 0
uikit/src/com/netease/nim/uikit/views/MutipleRadioGroup.java

@@ -0,0 +1,337 @@
+package com.netease.nim.uikit.views;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.os.Build;
+import android.support.annotation.IdRes;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+
+/**
+ * Created by Key on 2015/9/27 16:31
+ * email: MrKey.K@gmail.com
+ * description: 此版本只能支持内部一层布局,为了防止意外BUG,不要多层布局,RadioGroup内放一层布局,然后再在布局内放RadioButton,并且只放RadioButton
+ *              此版本只是为了增加点效率。因为大部分情况下使用不需要那么多层布局
+ *              V2单独一个RadioButton是不支持的,就算单独一个外面也要再加一层布局,因为本身就是为了简化代码增加效率
+ *              考虑到实际这样的用法不多和初衷只是为了实现多行多列。所以懒得再写一个else if了
+ *              如果布局很复杂直接用V1就好了。
+ * @version 1.2
+ */
+
+public class MutipleRadioGroup extends LinearLayout {
+    private int mCheckedId = -1;
+    // tracks children radio buttons checked state
+    private CompoundButton.OnCheckedChangeListener mChildOnCheckedChangeListener;
+    // when true, mOnCheckedChangeListener discards events
+    private boolean mProtectFromCheckedChange = false;
+    private OnCheckedChangeListener mOnCheckedChangeListener;
+    private PassThroughHierarchyChangeListener mPassThroughListener;
+
+    public MutipleRadioGroup(Context context) {
+        super(context);
+        setOrientation(VERTICAL);
+        init();
+    }
+
+    public MutipleRadioGroup(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        // retrieve selected radio button as requested by the user in the
+        // XML layout file
+        // com.android.internal.R.styleable.RadioGroup
+        // com.android.internal.R.attr.radioButtonStyle
+        TypedArray attributes = context.obtainStyledAttributes(attrs,
+                new int[]{Resources.getSystem().getIdentifier("RadioGroup", "styleable", "android")},
+                Resources.getSystem().getIdentifier("radioButtonStyle", "attr", "android"), 0);
+
+        // com.android.internal.R.styleable.RadioGroup_checkedButton
+        int value = attributes.getResourceId(Resources.getSystem().getIdentifier("RadioGroup_checkedButton", "styleable", "android"), View.NO_ID);
+        if (value != View.NO_ID) {
+            mCheckedId = value;
+        }
+
+        // com.android.internal.R.styleable.RadioGroup_orientation
+        final int index = attributes.getInt(Resources.getSystem().getIdentifier("RadioGroup_orientation", "styleable", "android"), VERTICAL);
+        setOrientation(index);
+
+        attributes.recycle();
+        init();
+    }
+
+    private void init() {
+        mChildOnCheckedChangeListener = new CheckedStateTracker();
+        mPassThroughListener = new PassThroughHierarchyChangeListener();
+        super.setOnHierarchyChangeListener(mPassThroughListener);
+    }
+
+    @Override
+    public void setOnHierarchyChangeListener(OnHierarchyChangeListener listener) {
+        // the user listener is delegated to our pass-through listener
+        mPassThroughListener.mOnHierarchyChangeListener = listener;
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        // checks the appropriate radio button as requested in the XML file
+        if (mCheckedId != -1) {
+            mProtectFromCheckedChange = true;
+            setCheckedStateForView(mCheckedId, true);
+            mProtectFromCheckedChange = false;
+            setCheckedId(mCheckedId);
+        }
+    }
+
+    /**
+     * 父类之会识别是RadioButton的子控件,所以这个RadioGroup必须在下面放一个别的布局才会不重复添加
+     * 为了防止意外BUG,不要多层布局,RadioGroup内放一层布局,然后再在布局内放RadioButton,并且只放RadioButton
+     * 为了不影响效率。并且只是满足简单的使用,就没有把方法抽出来,此版本只能支持内部一层布局
+     */
+    @Override
+    public void addView(View child, int index, ViewGroup.LayoutParams params) {
+        if (child instanceof ViewGroup) {
+            int childCount = ((ViewGroup) child).getChildCount();
+            for (int i = 0; i < childCount; i++) {
+                final RadioButton button = (RadioButton) ((ViewGroup) child).getChildAt(i);
+                if (button.isChecked()) {
+                    mProtectFromCheckedChange = true;
+                    if (mCheckedId != -1) {
+                        setCheckedStateForView(mCheckedId, false);
+                    }
+                    mProtectFromCheckedChange = false;
+                    setCheckedId(button.getId());
+                }
+            }
+        }
+        super.addView(child, index, params);
+    }
+
+    /**
+     * <p>Sets the selection to the radio button whose identifier is passed in
+     * parameter. Using -1 as the selection identifier clears the selection;
+     * such an operation is equivalent to invoking {@link #clearCheck()}.</p>
+     *
+     * @param id the unique id of the radio button to select in this group
+     *
+     * @see #getCheckedRadioButtonId()
+     * @see #clearCheck()
+     */
+    public void check(@IdRes int id) {
+        // don't even bother
+        if (id != -1 && (id == mCheckedId)) {
+            return;
+        }
+
+        if (mCheckedId != -1) {
+            setCheckedStateForView(mCheckedId, false);
+        }
+
+        if (id != -1) {
+            setCheckedStateForView(id, true);
+        }
+
+        setCheckedId(id);
+    }
+
+    private void setCheckedId(@IdRes int id) {
+        mCheckedId = id;
+        if (mOnCheckedChangeListener != null) {
+            mOnCheckedChangeListener.onCheckedChanged(this, mCheckedId);
+        }
+    }
+
+    private void setCheckedStateForView(int viewId, boolean checked) {
+        View checkedView = findViewById(viewId);
+        if (checkedView != null && checkedView instanceof RadioButton) {
+            ((RadioButton) checkedView).setChecked(checked);
+        }
+    }
+
+    /**
+     * <p>Returns the identifier of the selected radio button in this group.
+     * Upon empty selection, the returned value is -1.</p>
+     *
+     * @return the unique id of the selected radio button in this group
+     *
+     * @see #check(int)
+     * @see #clearCheck()
+     *
+     * @attr ref android.R.styleable#RadioGroup_checkedButton
+     */
+    @IdRes
+    public int getCheckedRadioButtonId() {
+        return mCheckedId;
+    }
+
+    /**
+     * <p>Clears the selection. When the selection is cleared, no radio button
+     * in this group is selected and {@link #getCheckedRadioButtonId()} returns
+     * null.</p>
+     *
+     * @see #check(int)
+     * @see #getCheckedRadioButtonId()
+     */
+    public void clearCheck() {
+        check(-1);
+    }
+
+    /**
+     * <p>Register a callback to be invoked when the checked radio button
+     * changes in this group.</p>
+     *
+     * @param listener the callback to call on checked state change
+     */
+    public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
+        mOnCheckedChangeListener = listener;
+    }
+
+    @Override
+    public MutipleRadioGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
+        return new MutipleRadioGroup.LayoutParams(getContext(), attrs);
+    }
+
+    @Override
+    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
+        return p instanceof MutipleRadioGroup.LayoutParams;
+    }
+
+    @Override
+    protected LinearLayout.LayoutParams generateDefaultLayoutParams() {
+        return new MutipleRadioGroup.LayoutParams(MutipleRadioGroup.LayoutParams.WRAP_CONTENT, MutipleRadioGroup.LayoutParams.WRAP_CONTENT);
+    }
+
+    @Override
+    public CharSequence getAccessibilityClassName() {
+        return MutipleRadioGroup.class.getName();
+    }
+
+    public static class LayoutParams extends LinearLayout.LayoutParams {
+
+        public LayoutParams(Context c, AttributeSet attrs) {
+            super(c, attrs);
+        }
+
+        public LayoutParams(int w, int h) {
+            super(w, h);
+        }
+
+        public LayoutParams(int w, int h, float initWeight) {
+            super(w, h, initWeight);
+        }
+
+        public LayoutParams(ViewGroup.LayoutParams p) {
+            super(p);
+        }
+
+        public LayoutParams(MarginLayoutParams source) {
+            super(source);
+        }
+
+        /**
+         * <p>Fixes the child's width to
+         * {@link ViewGroup.LayoutParams#WRAP_CONTENT} and the child's
+         * height to  {@link ViewGroup.LayoutParams#WRAP_CONTENT}
+         * when not specified in the XML file.</p>
+         *
+         * @param a the styled attributes set
+         * @param widthAttr the width attribute to fetch
+         * @param heightAttr the height attribute to fetch
+         */
+        @Override
+        protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) {
+
+            if (a.hasValue(widthAttr)) {
+                width = a.getLayoutDimension(widthAttr, "layout_width");
+            } else {
+                width = WRAP_CONTENT;
+            }
+
+            if (a.hasValue(heightAttr)) {
+                height = a.getLayoutDimension(heightAttr, "layout_height");
+            } else {
+                height = WRAP_CONTENT;
+            }
+        }
+    }
+
+    /**
+     * <p>Interface definition for a callback to be invoked when the checked
+     * radio button changed in this group.</p>
+     */
+    public interface OnCheckedChangeListener {
+        public void onCheckedChanged(MutipleRadioGroup group, @IdRes int checkedId);
+    }
+
+    private class CheckedStateTracker implements CompoundButton.OnCheckedChangeListener {
+        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+            // prevents from infinite recursion
+            if (mProtectFromCheckedChange) {
+                return;
+            }
+
+            mProtectFromCheckedChange = true;
+            if (mCheckedId != -1) {
+                setCheckedStateForView(mCheckedId, false);
+            }
+            mProtectFromCheckedChange = false;
+
+            int id = buttonView.getId();
+            setCheckedId(id);
+        }
+    }
+
+    private class PassThroughHierarchyChangeListener implements
+            OnHierarchyChangeListener {
+        private OnHierarchyChangeListener mOnHierarchyChangeListener;
+
+        /**
+         * 为了不出意料之外的BUG。所以强行规定了。RadioGroup内必须加一层布局
+         */
+        public void onChildViewAdded(View parent, View child) {
+            if (parent == MutipleRadioGroup.this && child instanceof ViewGroup) {
+                int childCount = ((ViewGroup) child).getChildCount();
+                for (int i = 0; i < childCount; i++) {
+                    int id = ((ViewGroup) child).getChildAt(i).getId();
+                    // generates an id if it's missing
+                    if (id == View.NO_ID) {
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+                            // generateViewId() 这个方法最低需要API17 这个方法用于生成ID , 这里做一下向下兼容
+                            id = View.generateViewId();
+                        } else {
+                            id = child.hashCode();
+                        }
+                        ((ViewGroup) child).getChildAt(i).setId(id);
+                    }
+                    ((RadioButton) ((ViewGroup) child).getChildAt(i)).setOnCheckedChangeListener(
+                            mChildOnCheckedChangeListener);
+                }
+            }
+
+            if (mOnHierarchyChangeListener != null) {
+                mOnHierarchyChangeListener.onChildViewAdded(parent, child);
+            }
+        }
+
+        /**
+         * 移除同上
+         */
+        public void onChildViewRemoved(View parent, View child) {
+            if (parent == MutipleRadioGroup.this && child instanceof ViewGroup) {
+                int childCount = ((ViewGroup) child).getChildCount();
+                for (int i = 0; i < childCount; i++) {
+                    ((RadioButton)  ((ViewGroup) child).getChildAt(i)).setOnCheckedChangeListener(null);
+                }
+            }
+
+            if (mOnHierarchyChangeListener != null) {
+                mOnHierarchyChangeListener.onChildViewRemoved(parent, child);
+            }
+        }
+    }
+}