zengjiebin лет назад: 7
Родитель
Сommit
9496024bda

+ 1 - 17
.idea/compiler.xml

@@ -1,22 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="CompilerConfiguration">
-    <resourceExtensions />
-    <wildcardResourcePatterns>
-      <entry name="!?*.java" />
-      <entry name="!?*.form" />
-      <entry name="!?*.class" />
-      <entry name="!?*.groovy" />
-      <entry name="!?*.scala" />
-      <entry name="!?*.flex" />
-      <entry name="!?*.kt" />
-      <entry name="!?*.clj" />
-      <entry name="!?*.aj" />
-    </wildcardResourcePatterns>
-    <annotationProcessing>
-      <profile default="true" name="Default" enabled="false">
-        <processorPath useClasspath="true" />
-      </profile>
-    </annotationProcessing>
+    <bytecodeTargetLevel target="1.9" />
   </component>
 </project>

+ 0 - 3
.idea/copyright/profiles_settings.xml

@@ -1,3 +0,0 @@
-<component name="CopyrightManager">
-  <settings default="" />
-</component>

+ 1 - 1
.idea/vcs.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+    <mapping directory="" vcs="Git" />
   </component>
 </project>

+ 28 - 0
app/src/main/java/com/sheep/gamegroup/absBase/AbsFocus.java

@@ -0,0 +1,28 @@
+package com.sheep.gamegroup.absBase;
+
+/**
+ * Created by realicing on 2018/11/22.
+ * realicing@sina.com
+ */
+public abstract class AbsFocus {
+
+    public static final int NONE = -1;
+    public static final int YES = 1;
+    public static final int NO = 0;
+
+    private int focusState = NONE;
+    public boolean isFocus(){
+        switch (focusState){
+            case -1:
+                focusState = getTheFocusId() > 0 ? YES : NO;
+                break;
+        }
+        return focusState == YES;
+    }
+
+    public abstract int getTheFocusId();
+
+    public void setFocus(boolean focus) {
+        focusState = focus ? YES : NO;
+    }
+}

+ 2 - 4
app/src/main/java/com/sheep/gamegroup/model/entity/SheepSignResult.java

@@ -3,6 +3,8 @@ package com.sheep.gamegroup.model.entity;
 
 import com.sheep.jiuyan.samllsheep.ui.activity.SignActivity;
 
+import static com.sheep.gamegroup.absBase.AbsFocus.YES;
+
 /**
  * Created by realicing on 2018/11/13.
  * realicing@sina.com
@@ -30,10 +32,6 @@ public class SheepSignResult {
     }
 
 
-
-    public static final int YES = 1;
-    public static final int NO = 0;
-
     //是否签到成功
     public boolean isSign(){
         return hasSign == YES;

+ 8 - 1
app/src/main/java/com/sheep/gamegroup/model/entity/UserFocusGame.java

@@ -1,11 +1,13 @@
 package com.sheep.gamegroup.model.entity;
 
+import com.sheep.gamegroup.absBase.AbsFocus;
+
 /**
  * Created by realicing on 2018/11/22.
  * realicing@sina.com
  * 小绵羊3.4.5新增--用户关注的游戏
  */
-public class UserFocusGame {
+public class UserFocusGame extends AbsFocus {
     private int CreateTime;
 
     private Applications applications;
@@ -46,4 +48,9 @@ public class UserFocusGame {
     public int getUser_id(){
         return this.user_id;
     }
+
+    @Override
+    public int getTheFocusId() {
+        return focus_game_id;
+    }
 }

+ 39 - 1
app/src/main/java/com/sheep/gamegroup/model/entity/UserFocusLog.java

@@ -1,11 +1,23 @@
 package com.sheep.gamegroup.model.entity;
 
+import android.graphics.Color;
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.style.AbsoluteSizeSpan;
+import android.text.style.ForegroundColorSpan;
+
+import com.sheep.gamegroup.absBase.AbsFocus;
+import com.sheep.gamegroup.util.ResourceUtils;
+import com.sheep.jiuyan.samllsheep.R;
+
+import java.util.Locale;
+
 /**
  * Created by realicing on 2018/11/22.
  * realicing@sina.com
  * 小绵羊3.4.5新增--用户关注的用户
  */
-public class UserFocusLog {
+public class UserFocusLog extends AbsFocus {
     private String avatar;
 
     private int create_time;
@@ -62,4 +74,30 @@ public class UserFocusLog {
     public String getUser_type(){
         return this.user_type;
     }
+
+
+    @Override
+    public int getTheFocusId() {
+        return focus_user_id;
+    }
+
+    public CharSequence getInfo() {
+        if(nickname == null){
+            return user_type;
+        }
+        if(user_type == null){
+            return "";
+        }
+        String content = String.format(Locale.CHINA, "%s\n%s", nickname, user_type);
+        SpannableStringBuilder spannableString = new SpannableStringBuilder();
+        spannableString.append(content);
+        int start = nickname.length();
+        int end = content.length();
+        AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(ResourceUtils.getXmlDef(R.dimen.sp_12), true);
+        spannableString.setSpan(absoluteSizeSpan, start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
+        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#999999"));
+        spannableString.setSpan(colorSpan, start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
+
+        return spannableString;
+    }
 }

+ 23 - 0
app/src/main/java/com/sheep/gamegroup/util/ResourceUtils.java

@@ -0,0 +1,23 @@
+package com.sheep.gamegroup.util;
+
+import android.util.TypedValue;
+
+import com.sheep.jiuyan.samllsheep.SheepApp;
+
+/**
+ * Created by realicing on 2018/11/22.
+ * realicing@sina.com
+ */
+public class ResourceUtils {
+    private static TypedValue mTmpValue = new TypedValue();
+
+    private ResourceUtils(){}
+
+    public static int getXmlDef(int id){
+        synchronized (mTmpValue) {
+            TypedValue value = mTmpValue;
+            SheepApp.getInstance().getResources().getValue(id, value, true);
+            return (int)TypedValue.complexToFloat(value.data);
+        }
+    }
+}

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/util/ViewUtil.java

@@ -1595,7 +1595,7 @@ public class ViewUtil {
         }
     }
 
-    public static void setText(TextView textView, String msg) {
+    public static void setText(TextView textView, CharSequence msg) {
         if (textView != null) {
             textView.setText(TextUtils.isEmpty(msg) ? "" : msg);
         }

+ 2 - 1
app/src/main/java/com/sheep/gamegroup/view/activity/ActMyFocus.java

@@ -7,6 +7,7 @@ import com.sheep.gamegroup.absBase.BaseActivity;
 import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.view.adapter.TitleFragmentListAdapter;
 import com.sheep.gamegroup.view.fragment.FgtGameFocusList;
+import com.sheep.gamegroup.view.fragment.FgtUserFocusLogList;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
 
@@ -41,7 +42,7 @@ public class ActMyFocus extends BaseActivity {
     public void initData() {
         mAdapter = new TitleFragmentListAdapter(getSupportFragmentManager());
         mAdapter.add(new FgtGameFocusList(), "游戏");
-        mAdapter.add(new FgtGameFocusList(), "人员");
+        mAdapter.add(new FgtUserFocusLogList(), "人员");
         pager.setAdapter(mAdapter);
         indicator.setupWithViewPager(pager);
         pager.setCurrentItem(0);

+ 78 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/AdpUserFocusLogList.java

@@ -0,0 +1,78 @@
+package com.sheep.gamegroup.view.adapter;
+
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.UserFocusLog;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.gamegroup.util.ActivityManager;
+import com.sheep.gamegroup.util.ApiUtil;
+import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.gamegroup.view.fragment.FgtUserFocusLogList;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
+
+import java.util.List;
+
+/**
+ * Created by realicing on 2018/11/22.
+ * realicing@sina.com
+ */
+public class AdpUserFocusLogList extends BaseQuickAdapter<UserFocusLog, BaseViewHolder> {
+    public AdpUserFocusLogList(List<UserFocusLog> list) {
+        super(R.layout.item_my_focus, list);
+    }
+
+
+    @Override
+    public void convert(BaseViewHolder holder, final UserFocusLog  item) {
+        ImageView item_my_focus_iv = holder.itemView.findViewById(R.id.item_my_focus_iv);
+        TextView item_my_focus_info_tv = holder.itemView.findViewById(R.id.item_my_focus_info_tv);
+        final TextView item_my_focus_tv = holder.itemView.findViewById(R.id.item_my_focus_tv);
+        if(item == null || item.getId() <= 0) {
+            ViewUtil.setImage(item_my_focus_iv, "");
+            ViewUtil.setDefaultText(item_my_focus_info_tv);
+            ViewUtil.setDefaultText(item_my_focus_tv);
+            ViewUtil.setEnabled(item_my_focus_tv, false);
+        } else {
+            ViewUtil.setAvatar(item_my_focus_iv, item.getAvatar());
+            ViewUtil.setText(item_my_focus_info_tv, item.getInfo());
+            ViewUtil.setEnabled(item_my_focus_tv, true);
+            FgtUserFocusLogList.updateItemFocusTv(item.isFocus(), item_my_focus_tv);
+            item_my_focus_tv.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(final View view) {
+                    view.setEnabled(false);
+                    ApiUtil.postGameUserFocusUser(item.getTheFocusId(), new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                        @Override
+                        public void onNext(BaseMessage baseMessage) {
+                            G.showToast(item.isFocus() ? R.string.cancel_focus_success : R.string.focus_success);
+                            item.setFocus(!item.isFocus());
+                            FgtUserFocusLogList.updateItemFocusTv(item.isFocus(), item_my_focus_tv);
+                            view.setEnabled(true);
+                        }
+
+                        @Override
+                        public void onError(BaseMessage baseMessage) {
+                            G.showToast(item.isFocus() ? R.string.cancel_focus_fail : R.string.focus_fail);
+                            view.setEnabled(true);
+                        }
+                    });
+                }
+            });
+            holder.itemView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    Jump2View.getInstance().goActUserAppHome(ActivityManager.getInstance().currentActivity(), item.getTheFocusId());
+                }
+            });
+
+        }
+    }
+}

+ 314 - 0
app/src/main/java/com/sheep/gamegroup/view/fragment/BaseListFragment2x.java

@@ -0,0 +1,314 @@
+package com.sheep.gamegroup.view.fragment;
+
+import android.app.Activity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+import com.jcodecraeer.xrecyclerview.XRecyclerView;
+import com.sheep.gamegroup.absBase.AbsObserver;
+import com.sheep.gamegroup.absBase.ILoadMore;
+import com.sheep.gamegroup.absBase.IRefresh;
+import com.sheep.gamegroup.model.api.ApiService;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.gamegroup.util.CommonUtil;
+import com.sheep.gamegroup.util.DataUtil;
+import com.sheep.gamegroup.util.ListUtil;
+import com.sheep.gamegroup.util.SysAppUtil;
+import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.base.BaseFragment;
+
+import java.util.List;
+
+import butterknife.BindView;
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+import rx.functions.Action1;
+
+/**
+ * Created by realicing on 2018/11/22.
+ * realicing@sina.com
+ * 可设置每次请求多个接口
+ * 自己可以进行刷新与加载更多,使用com.jcodecraeer.xrecyclerview.XRecyclerView来实现,子类提供网络接口相关
+ */
+public abstract class BaseListFragment2x<T,T2> extends BaseFragment implements IRefresh, ILoadMore {
+    @Override
+    public int getLayoutId() {
+        return R.layout.net_empty_xrecycler;
+    }
+
+    protected Activity activity;
+
+    @Override
+    public void onViewCreated() {
+        activity = getActivity();
+        initView();
+        initListener();
+        switch (refreshDataType()) {
+            case REFRESH_ON_CREATE:
+                ViewUtil.refreshXrv(view_list);
+                break;
+            case REFRESH_ON_RESUME:
+                break;
+            case REFRESH_ON_YOURSELF:
+            default:
+                notifyDataSetChanged(0);
+                break;
+        }
+    }
+
+    public static final int REFRESH_ON_CREATE = 0;
+    public static final int REFRESH_ON_RESUME = 1;
+    public static final int REFRESH_ON_YOURSELF = -1;
+    @BindView(R.id.title)
+    protected View title;
+    @BindView(R.id.empty_view)
+    protected View empty_view;
+    @BindView(R.id.check_net_ll)
+    protected View check_net_ll;
+    @BindView(R.id.view_list)
+    protected XRecyclerView view_list;
+
+    protected BaseMessage lastMessage;//最后一个网络获取的结果
+    protected BaseMessage lastMessage2;//最后一个网络获取的结果
+    protected int page = 1;//页数
+    protected int per_page = DataUtil.PER_PAGE;
+    private boolean loadMore;
+
+    public void initView() {
+        title.setVisibility(View.GONE);
+    }
+
+    protected View bottomLine;
+
+    public void initListener() {
+        view_list.setLoadingListener(new XRecyclerView.LoadingListener() {
+            @Override
+            public void onRefresh() {
+                refreshData();
+            }
+
+            @Override
+            public void onLoadMore() {
+                loadMoreData();
+
+            }
+        });
+        bottomLine = ViewUtil.setBottomLine(view_list, getNoMoreCallBack());
+        view_list.setLayoutManager(new LinearLayoutManager(SheepApp.getInstance()));
+        view_list.setAdapter(getAdapter());
+    }
+
+    public void loadMoreData() {
+        if (!loadMore) {
+            loadMore = true;
+            if (ListUtil.size(list) >= per_page * page) {
+                page += 1;
+                initData();
+            } else {
+                view_list.setNoMore(true);
+                setNoMore(true);
+            }
+        } else {
+            view_list.loadMoreComplete();
+        }
+    }
+
+    public void setNoMore(boolean noMore) {
+        this.noMore = noMore;
+    }
+
+    protected List<T> list = ListUtil.emptyList();
+    protected List<T> lastCacheList = ListUtil.emptyList();
+    protected List<T2> list2 = ListUtil.emptyList();
+    protected List<T2> lastCacheList2 = ListUtil.emptyList();
+
+    //默认先获取缓存
+    protected boolean isFirstGetACache() {
+        return true;
+    }
+
+    public void initData() {
+        final String urlKey = getKey(page, per_page);
+        if (isFirstGetACache()) {
+            //先尝试获取缓存数据
+            lastCacheList = DataUtil.getInstance().getCacheList(urlKey, getTClass());
+            loadList(lastCacheList);
+        }
+        final String urlKey2 = getKey2(page, per_page);
+        if (isFirstGetACache()) {
+            //先尝试获取缓存数据
+            lastCacheList2 = DataUtil.getInstance().getCacheList(urlKey2, getT2Class());
+            loadList2(lastCacheList2);
+        }
+        SysAppUtil.checkNet(new AbsObserver<Integer>() {
+            @Override
+            public void onNext(Integer result) {
+                if (result != 0) {//无网络
+                    if (check_net_ll != null)
+                        check_net_ll.setVisibility(View.VISIBLE);
+                } else {
+                    if (check_net_ll != null)
+                        check_net_ll.setVisibility(View.GONE);
+                }
+            }
+        });
+        getApi(SheepApp.getInstance().getNetComponent().getApiService())
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        lastMessage = baseMessage;
+                        boolean isNewData = DataUtil.getInstance().isNewData(urlKey);
+                        if (isNewData || !isFirstGetACache()) {
+                            if (isFirstGetACache())
+                                ListUtil.removeAll(list, lastCacheList);
+                            List<T> newList = baseMessage.getDatas(getTClass());
+                            loadList(newList);
+                        } else {
+                            notifyDataSetChanged(1);
+                        }
+                    }
+
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        notifyDataSetChanged(1);
+                    }
+                });
+        getApi2(SheepApp.getInstance().getNetComponent().getApiService())
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        lastMessage2 = baseMessage;
+                        boolean isNewData = DataUtil.getInstance().isNewData(urlKey2);
+                        if (isNewData || !isFirstGetACache()) {
+                            if (isFirstGetACache())
+                                ListUtil.removeAll(list2, lastCacheList2);
+                            List<T2> newList = baseMessage.getDatas(getT2Class());
+                            loadList2(newList);
+                        } else {
+                            notifyDataSetChanged(2);
+                        }
+                    }
+
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        notifyDataSetChanged(2);
+                    }
+                });
+    }
+
+    public Action1<String> getNoMoreCallBack() {
+        return null;
+    }
+
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        if (refreshDataType() == REFRESH_ON_RESUME) {
+            ViewUtil.refreshXrv(view_list);
+        }
+    }
+
+    /**
+     * 在哪里初始化数据:0 onViewCreated后, 1 onResume后, -1 不初始化
+     *
+     * @return
+     */
+    public int refreshDataType() {
+        return REFRESH_ON_CREATE;
+    }
+
+    public void clear() {
+        lastMessage = null;
+        lastMessage2 = null;
+        setNoMore(false);
+        empty_view.setVisibility(View.INVISIBLE);
+        list.clear();
+        list2.clear();
+        page = 1;
+    }
+
+    public void refreshData() {
+        clear();
+        ViewUtil.notifyDataSetChanged(view_list);
+        initData();
+    }
+
+    protected List<T> newList;
+
+    protected void loadList(List<T> addList) {
+        ListUtil.addAllItem(list, addList);
+        newList = addList;
+        notifyDataSetChanged(1);
+    }
+    protected List<T2> newList2;
+
+    protected void loadList2(List<T2> addList) {
+        ListUtil.addAllItem(list2, addList);
+        newList2 = addList;
+        notifyDataSetChanged(2);
+    }
+
+    public void notifyDataSetChanged(int x) {
+        if (view_list == null)
+            view_list = findViewById(R.id.view_list);
+        if (empty_view == null)
+            empty_view = findViewById(R.id.empty_view);
+        loadMore = false;
+        updateEmptyView();
+        if (page == 1) {
+            view_list.refreshComplete();
+        } else {
+            view_list.loadMoreComplete();
+        }
+        ViewUtil.notifyDataSetChanged(view_list);
+        notifyData(x);
+        view_list.getFootView().setVisibility(list.isEmpty() && list2.isEmpty() ? View.GONE : View.VISIBLE);
+    }
+
+    protected void updateEmptyView() {
+        CommonUtil.getInstance().updateEmptyView(empty_view, list.isEmpty());
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        // any time,when you finish your activity or fragment,call this below
+        if (view_list != null) {
+            view_list.destroy(); // this will totally release XR's memory
+            view_list = null;
+        }
+    }
+
+
+    private boolean noMore = false;
+
+    public boolean isNoMore() {
+        return noMore;
+    }
+
+    protected abstract RecyclerView.Adapter getAdapter();
+
+    protected abstract String getKey(int page, int per_page);
+    protected abstract String getKey2(int page, int per_page);
+
+    protected abstract Observable<BaseMessage> getApi(ApiService apiService);
+    protected abstract Observable<BaseMessage> getApi2(ApiService apiService);
+
+    protected abstract Class<T> getTClass();
+    protected abstract Class<T2> getT2Class();
+
+    //刷新数据的回调,子类可以实现自己的需求
+    public void notifyData(int x){
+
+    }
+}

+ 9 - 17
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGameFocusList.java

@@ -42,7 +42,7 @@ public class FgtGameFocusList extends BaseListFragment2<UserFocusGame>{
             public void convert(ViewHolder holder, final UserFocusGame  item) {
                 ImageView item_my_focus_iv = holder.itemView.findViewById(R.id.item_my_focus_iv);
                 TextView item_my_focus_info_tv = holder.itemView.findViewById(R.id.item_my_focus_info_tv);
-                TextView item_my_focus_tv = holder.itemView.findViewById(R.id.item_my_focus_tv);
+                final TextView item_my_focus_tv = holder.itemView.findViewById(R.id.item_my_focus_tv);
                 final Applications applications = item.getApplications();
                 if(applications == null || applications.getId() <= 0) {
                     ViewUtil.setImage(item_my_focus_iv, "");
@@ -50,34 +50,26 @@ public class FgtGameFocusList extends BaseListFragment2<UserFocusGame>{
                     ViewUtil.setDefaultText(item_my_focus_tv);
                     ViewUtil.setEnabled(item_my_focus_tv, false);
                 } else {
-                    ViewUtil.setImage(item_my_focus_iv, applications.getIcon());
+                    ViewUtil.setGameImage(item_my_focus_iv, applications.getIcon());
                     ViewUtil.setText(item_my_focus_info_tv, applications.getName());
-                    if(item.getFocus_game_id() > 0){
-                        ViewUtil.setText(item_my_focus_tv, "已关注");
-                        item_my_focus_tv.setBackgroundResource(R.drawable.selector_button_stroke_main);
-                        item_my_focus_tv.setTextColor(getResources().getColorStateList(R.color.selector_color_stoke_main_btn));
-                    } else {
-                        ViewUtil.setText(item_my_focus_tv, "关注");
-                        item_my_focus_tv.setBackgroundResource(R.drawable.selector_btn_stroke_333);
-                        item_my_focus_tv.setTextColor(getResources().getColorStateList(R.color.selector_color_stoke_333));
-                    }
                     ViewUtil.setEnabled(item_my_focus_tv, true);
+                    FgtUserFocusLogList.updateItemFocusTv(item.isFocus(), item_my_focus_tv);
                     item_my_focus_tv.setOnClickListener(new View.OnClickListener() {
                         @Override
                         public void onClick(final View view) {
-                            final boolean isFocusGame = item.getFocus_game_id() > 0;
                             view.setEnabled(false);
-                            ApiUtil.postGameUserFocusGame(applications.getId(), new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                            ApiUtil.postGameUserFocusGame(item.getTheFocusId(), new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
                                 @Override
                                 public void onNext(BaseMessage baseMessage) {
-                                    G.showToast(isFocusGame ? R.string.cancel_focus_success : R.string.focus_success);
-                                    item.setFocus_game_id(isFocusGame ? 0 : applications.getId());
+                                    G.showToast(item.isFocus() ? R.string.cancel_focus_success : R.string.focus_success);
+                                    item.setFocus(!item.isFocus());
+                                    FgtUserFocusLogList.updateItemFocusTv(item.isFocus(), item_my_focus_tv);
                                     view.setEnabled(true);
                                 }
 
                                 @Override
                                 public void onError(BaseMessage baseMessage) {
-                                    G.showToast(isFocusGame ? R.string.cancel_focus_fail : R.string.focus_fail);
+                                    G.showToast(item.isFocus() ? R.string.cancel_focus_fail : R.string.focus_fail);
                                     view.setEnabled(true);
                                 }
                             });
@@ -86,7 +78,7 @@ public class FgtGameFocusList extends BaseListFragment2<UserFocusGame>{
                     holder.itemView.setOnClickListener(new View.OnClickListener() {
                         @Override
                         public void onClick(View view) {
-                            Jump2View.getInstance().goPlayGameDetail(ActivityManager.getInstance().currentActivity(), applications.getId());
+                            Jump2View.getInstance().goPlayGameDetail(ActivityManager.getInstance().currentActivity(), item.getTheFocusId());
                         }
                     });
 

+ 2 - 2
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtPlaGameGift.java

@@ -34,7 +34,7 @@ import rx.functions.Action1;
  */
 
 public class FgtPlaGameGift extends BaseFragment {
-    @BindView(R.id.recyclerview_list)
+    @BindView(R.id.recyclerView)
     RecyclerView recyclerviewList;
     Unbinder unbinder;
 
@@ -53,7 +53,7 @@ public class FgtPlaGameGift extends BaseFragment {
 
     @Override
     public int getLayoutId() {
-        return R.layout.recyclerview_layout;
+        return R.layout.common_rv;
     }
 
     @Override

+ 86 - 65
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtUserFocusLogList.java

@@ -1,28 +1,28 @@
 package com.sheep.gamegroup.view.fragment;
 
+import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
 import android.view.View;
-import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.sheep.gamegroup.model.api.ApiService;
-import com.sheep.gamegroup.model.entity.Applications;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.UserFocusLog;
-import com.sheep.gamegroup.model.entity.UserFocusLog;
-import com.sheep.gamegroup.model.util.SheepSubscriber;
-import com.sheep.gamegroup.util.ActivityManager;
-import com.sheep.gamegroup.util.ApiUtil;
-import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.gamegroup.util.ListUtil;
 import com.sheep.gamegroup.util.ViewHolder;
 import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.gamegroup.view.adapter.AdbCommonRecycler;
+import com.sheep.gamegroup.view.adapter.AdpUserFocusLogList;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
-import com.sheep.jiuyan.samllsheep.utils.G;
 
 import org.afinal.simplecache.ApiKey;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import io.reactivex.Observable;
 
 /**
@@ -30,84 +30,105 @@ import io.reactivex.Observable;
  * realicing@sina.com
  * 小绵羊3.4.5新界面--我的关注--人员列表子模块
  */
-public class FgtUserFocusLogList extends BaseListFragment2<UserFocusLog>{
+public class FgtUserFocusLogList extends BaseListFragment2x<UserFocusLog, UserFocusLog> {
+    private List<String> tagList = new ArrayList<>();
+    private AdpUserFocusLogList adpUserFocusLogList;
+    private AdpUserFocusLogList adpUserFocusLogList2;
+
+    @Override
+    public void initView() {
+        tagList.add("1");
+        tagList.add("2");
+        adpUserFocusLogList = new AdpUserFocusLogList(list);
+        adpUserFocusLogList2 = new AdpUserFocusLogList(list2);
+        super.initView();
+    }
+
     @Override
     protected RecyclerView.Adapter getAdapter() {
-        return new AdbCommonRecycler<UserFocusLog>(SheepApp.getInstance(), list) {
+        return new AdbCommonRecycler<String>(SheepApp.getInstance(), tagList) {
             @Override
             public int getViewIdByType(int type) {
-                return R.layout.item_my_focus;
+                return R.layout.common_rv_wrap;
             }
 
             @Override
-            public void convert(ViewHolder holder, final UserFocusLog  item) {
-                ImageView item_my_focus_iv = holder.itemView.findViewById(R.id.item_my_focus_iv);
-                TextView item_my_focus_info_tv = holder.itemView.findViewById(R.id.item_my_focus_info_tv);
-                TextView item_my_focus_tv = holder.itemView.findViewById(R.id.item_my_focus_tv);
-//                final Applications applications = item.getApplications();
-//                if(applications == null || applications.getId() <= 0) {
-//                    ViewUtil.setImage(item_my_focus_iv, "");
-//                    ViewUtil.setDefaultText(item_my_focus_info_tv);
-//                    ViewUtil.setDefaultText(item_my_focus_tv);
-//                    ViewUtil.setEnabled(item_my_focus_tv, false);
-//                } else {
-//                    ViewUtil.setImage(item_my_focus_iv, applications.getIcon());
-//                    ViewUtil.setText(item_my_focus_info_tv, applications.getName());
-//                    if(item.getFocus_game_id() > 0){
-//                        ViewUtil.setText(item_my_focus_tv, "已关注");
-//                        item_my_focus_tv.setBackgroundResource(R.drawable.selector_button_stroke_main);
-//                        item_my_focus_tv.setTextColor(getResources().getColorStateList(R.color.selector_color_stoke_main_btn));
-//                    } else {
-//                        ViewUtil.setText(item_my_focus_tv, "关注");
-//                        item_my_focus_tv.setBackgroundResource(R.drawable.selector_btn_stroke_333);
-//                        item_my_focus_tv.setTextColor(getResources().getColorStateList(R.color.selector_color_stoke_333));
-//                    }
-//                    ViewUtil.setEnabled(item_my_focus_tv, true);
-//                    item_my_focus_tv.setOnClickListener(new View.OnClickListener() {
-//                        @Override
-//                        public void onClick(final View view) {
-//                            final boolean isFocusGame = item.getFocus_game_id() > 0;
-//                            view.setEnabled(false);
-//                            ApiUtil.postGameUserFocusLog(applications.getId(), new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
-//                                @Override
-//                                public void onNext(BaseMessage baseMessage) {
-//                                    G.showToast(isFocusGame ? R.string.cancel_focus_success : R.string.focus_success);
-//                                    item.setFocus_game_id(isFocusGame ? 0 : applications.getId());
-//                                    view.setEnabled(true);
-//                                }
-//
-//                                @Override
-//                                public void onError(BaseMessage baseMessage) {
-//                                    G.showToast(isFocusGame ? R.string.cancel_focus_fail : R.string.focus_fail);
-//                                    view.setEnabled(true);
-//                                }
-//                            });
-//                        }
-//                    });
-//                    holder.itemView.setOnClickListener(new View.OnClickListener() {
-//                        @Override
-//                        public void onClick(View view) {
-//                            Jump2View.getInstance().goPlayGameDetail(ActivityManager.getInstance().currentActivity(), applications.getId());
-//                        }
-//                    });
-//
-//                }
+            public void convert(ViewHolder holder, String tag) {
+                RecyclerView recyclerView = holder.itemView.findViewById(R.id.recyclerView);
+                recyclerView.setHasFixedSize(true);
+                recyclerView.setNestedScrollingEnabled(false);
+                recyclerView.setLayoutManager(new LinearLayoutManager(SheepApp.getInstance()));
+                recyclerView.setAdapter(TextUtils.equals(tag, tagList.get(0)) ? adpUserFocusLogList : adpUserFocusLogList2);
             }
+
         };
     }
 
     @Override
     protected String getKey(int page, int per_page) {
-        return ApiKey.pageKeyUrl(ApiKey.getGameUserGameFocusList, page, per_page);
+        return ApiKey.pageKeyUrl(ApiKey.getGameUserUserFocusList, page, per_page);
+    }
+
+    @Override
+    protected String getKey2(int page, int per_page) {
+        return ApiKey.pageKeyUrl(ApiKey.getGameUserUserFocusHotUser, page, per_page);
     }
 
     @Override
     protected Observable<BaseMessage> getApi(ApiService apiService) {
-        return apiService.getGameUserGameFocusList(page, per_page);
+        return apiService.getGameUserUserFocusList(page, per_page);
+    }
+
+    @Override
+    protected Observable<BaseMessage> getApi2(ApiService apiService) {
+        return apiService.getGameUserUserFocusHotUser(page, per_page);
+    }
+
+    private View headerView;
+
+    @Override
+    protected void loadList2(List<UserFocusLog> addList) {
+        if (ListUtil.isEmpty(addList)) {
+            if (adpUserFocusLogList2.getHeaderLayoutCount() > 0) {
+                adpUserFocusLogList2.removeAllHeaderView();
+            }
+        } else {
+            //TODO 这里有个问题,这里的关注状态怎么获取,按理说热门玩家不应该都是已经关注的用户才对
+            if (adpUserFocusLogList2.getHeaderLayoutCount() == 0) {
+                if (headerView == null)
+                    headerView = LayoutInflater.from(SheepApp.getInstance()).inflate(R.layout.header_my_focus_hot_user, null);
+                adpUserFocusLogList2.addHeaderView(headerView);
+            }
+        }
+        super.loadList2(addList);
     }
 
     @Override
     protected Class<UserFocusLog> getTClass() {
         return UserFocusLog.class;
     }
+
+    @Override
+    protected Class<UserFocusLog> getT2Class() {
+        return UserFocusLog.class;
+    }
+
+
+    /**
+     * 设置关注按钮文本与状态
+     *
+     * @param focus
+     * @param tv
+     */
+    public static void updateItemFocusTv(boolean focus, TextView tv) {
+        if (focus) {
+            ViewUtil.setText(tv, "已关注");
+            tv.setBackgroundResource(R.drawable.selector_button_stroke_main);
+            tv.setTextColor(SheepApp.getInstance().getResources().getColorStateList(R.color.selector_color_stoke_main_btn));
+        } else {
+            ViewUtil.setText(tv, "关注");
+            tv.setBackgroundResource(R.drawable.selector_btn_stroke_333);
+            tv.setTextColor(SheepApp.getInstance().getResources().getColorStateList(R.color.selector_color_stoke_333));
+        }
+    }
 }

+ 2 - 4
app/src/main/res/layout/recyclerview_layout.xml

@@ -1,7 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/recyclerview_list"
+    android:id="@+id/recyclerView"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-</android.support.v7.widget.RecyclerView>
+    android:layout_height="wrap_content"/>

+ 11 - 0
app/src/main/res/layout/header_my_focus_hot_user.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingStart="16dp"
+    android:paddingTop="14dp"
+    android:paddingEnd="16dp"
+    android:paddingBottom="14dp"
+    android:text="@string/hot_user"
+    android:textColor="#999"
+    android:textSize="13sp" />

+ 1 - 0
app/src/main/res/layout/item_my_focus.xml

@@ -21,6 +21,7 @@
         android:layout_height="wrap_content"
         android:layout_marginEnd="5dp"
         android:text="昵称"
+        android:lineSpacingExtra="8dp"
         android:textColor="#ff333333"
         android:textSize="16sp"
         app:layout_constraintBottom_toBottomOf="parent"

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -133,4 +133,7 @@
     <string name="img_upload">图片上传</string>
     <string name="nedd_picker_img">请选择截图后再进行提交</string>
     <string name="tip_tian_tian">温馨提示:了解更多小绵羊日常福利和优质内容请关注微信订阅号:天天小绵羊</string>
+
+    <!--小绵羊3.4.5新增功能 我的关注-->
+    <string name="hot_user">热门玩家</string>
 </resources>