Преглед изворни кода

优化游戏中心的功能:
发表评价的输入框自动获取焦点,且下面去掉线;
发表成功后刷新评价列表;
修复游戏详情中获取数据后重复加载的问题;
修复刷新数据可能挂掉的问题

zengjiebin пре 7 година
родитељ
комит
b01291760e

+ 6 - 0
app/src/main/java/com/sheep/gamegroup/absBase/BaseRefreshLoadMoreFragment.java

@@ -47,4 +47,10 @@ public abstract class BaseRefreshLoadMoreFragment extends BaseFragment implement
         super.setUserVisibleHint(isVisibleToUser);
         setSmartRefreshLayoutNoMore(noMore);
     }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        smartRefreshLayout = null;
+    }
 }

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java

@@ -1234,7 +1234,7 @@ public interface ApiService {
     Observable<BaseMessage> gameBannerAct();
 
     /**
-     * platform 平台 1:andriod 2:ios
+     * 游戏详情
      *
      * @return
      */

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

@@ -120,7 +120,7 @@ public class GameEntity implements Serializable {
     }
 
     /**
-     * 是有礼包
+     * 是有礼包
      *
      * @return
      */

+ 13 - 10
app/src/main/java/com/sheep/gamegroup/model/entity/GameInfoList.java

@@ -70,11 +70,14 @@ public class GameInfoList implements Comparable<GameInfoList> {
         return adapter;
     }
 
-    private RecyclerView.LayoutManager layoutManager;
-
+    //水平
+    public static final int LAYOUT_MANAGER_STYLE_VERTICAL = 0;
+    //垂直
+    public static final int LAYOUT_MANAGER_STYLE_HORIZONTAL = 1;
+    private int layoutManagerStyle = LAYOUT_MANAGER_STYLE_VERTICAL;
     //设置水平滑动
     public GameInfoList setHorizontal() {
-        layoutManager = new LinearLayoutManager(SheepApp.getInstance(), LinearLayoutManager.HORIZONTAL, false);
+        layoutManagerStyle = LAYOUT_MANAGER_STYLE_HORIZONTAL;
         return this;
     }
 
@@ -82,14 +85,14 @@ public class GameInfoList implements Comparable<GameInfoList> {
         this.adapter = adapter;
     }
 
-    public void setLayoutManager(RecyclerView.LayoutManager layoutManager) {
-        this.layoutManager = layoutManager;
-    }
-
     public RecyclerView.LayoutManager getLayoutManager() {
-        if (layoutManager == null)
-            layoutManager = new LinearLayoutManager(SheepApp.getInstance());
-        return layoutManager;
+        switch (layoutManagerStyle){
+            case LAYOUT_MANAGER_STYLE_HORIZONTAL:
+                return new LinearLayoutManager(SheepApp.getInstance(), LinearLayoutManager.HORIZONTAL, false);
+            case LAYOUT_MANAGER_STYLE_VERTICAL:
+            default:
+                return new LinearLayoutManager(SheepApp.getInstance());
+        }
     }
     private boolean showTopLine = true;//默认显示上面的线
 

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

@@ -2098,7 +2098,7 @@ public class Jump2View {
      * @param game_id  游戏id
      */
     public void goActCommentGameApp(Activity activity, int game_id) {
-        activity.startActivity(new Intent(activity, ActCommentGameApp.class).putExtra("game_id", game_id));
+        activity.startActivityForResult(new Intent(activity, ActCommentGameApp.class).putExtra("game_id", game_id), RequestCodeConstants.REQUEST_CODE_REFRESH);
     }
 
     /**

+ 10 - 0
app/src/main/java/com/sheep/gamegroup/util/RequestCodeConstants.java

@@ -0,0 +1,10 @@
+package com.sheep.gamegroup.util;
+
+/**
+ * Created by realicing on 2018/11/7.
+ * realicing@sina.com
+ */
+public class RequestCodeConstants {
+    //刷新回调
+    public static final int REQUEST_CODE_REFRESH = 1001;
+}

+ 1 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/ActCommentGameApp.java

@@ -62,6 +62,7 @@ public class ActCommentGameApp extends BaseActivity {
                     public void onNext(BaseMessage baseMessage) {
                         act_comment_game_app_input_comment.setText("");
                         G.showToast(baseMessage);
+                        setResult(RESULT_OK);
                         finish();
                     }
 

+ 32 - 7
app/src/main/java/com/sheep/gamegroup/view/activity/ActGcGameAppDetail.java

@@ -31,6 +31,7 @@ import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.Jump2View;
 import com.sheep.gamegroup.util.ListUtil;
 import com.sheep.gamegroup.util.RefreshUtil;
+import com.sheep.gamegroup.util.RequestCodeConstants;
 import com.sheep.gamegroup.util.TagListUtil;
 import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.gamegroup.view.adapter.TitleFragmentListAdapter;
@@ -92,7 +93,6 @@ public class ActGcGameAppDetail extends BaseActivity {
     private TitleFragmentListAdapter mAdapter;
     private FgtGcGameAppDetail fgtGcPlayGameDetail;
     private FgtGcGameAppComment fgtGcGameAppComment;
-    private FgtGcGameAppWelfare fgtGcGameAppWelfare;
 
     private int id;
     @Override
@@ -105,15 +105,12 @@ public class ActGcGameAppDetail extends BaseActivity {
         mAdapter = new TitleFragmentListAdapter(getSupportFragmentManager());
         fgtGcPlayGameDetail = FgtGcGameAppDetail.newInstance(id);
         fgtGcGameAppComment = FgtGcGameAppComment.newInstance(id);
-        fgtGcGameAppWelfare = FgtGcGameAppWelfare.newInstance(id);
         fgtGcPlayGameDetail.setSmartRefreshLayout(refresh);
         fgtGcGameAppComment.setSmartRefreshLayout(refresh);
         fgtGcGameAppComment.setListAction1(fgtGcPlayGameDetail);
-        fgtGcGameAppWelfare.setSmartRefreshLayout(refresh);
         mAdapter.add(fgtGcPlayGameDetail, "详情");
         mAdapter.add(fgtGcGameAppComment, "评价");
-        mAdapter.add(fgtGcGameAppWelfare, "福利");
-        viewPager.setOffscreenPageLimit(3);
+        viewPager.setOffscreenPageLimit(mAdapter.getCount());
         viewPager.setAdapter(mAdapter);
         tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
         tabLayout.setupWithViewPager(viewPager);
@@ -158,6 +155,7 @@ public class ActGcGameAppDetail extends BaseActivity {
         //更新关注状态
         gc_game_app_detail_bt1.setText(gameEntity.isIs_focus_game() ? "已关注" : "关注");
         gc_game_app_detail_bt1.setEnabled(!gameEntity.isIs_focus_game());
+        tryInitWelfare();
         //更新评价数量
         if(gameEntity.getApp().getComment_num() > 0) {
             TabLayout.Tab tab = tabLayout.getTabAt(1);
@@ -177,9 +175,20 @@ public class ActGcGameAppDetail extends BaseActivity {
         recyclerView.getAdapter().notifyDataSetChanged();
         //下载按钮
         CommonUtil.getInstance().palyGameDetailBtnValue(this, gameEntity, gc_game_app_detail_bt2, 0);
-        //初始化详情界面
         fgtGcPlayGameDetail.loadData(gameEntity);
+    }
+
+    private FgtGcGameAppWelfare fgtGcGameAppWelfare;
+    //重新初始化viewPager的数据
+    private void tryInitWelfare() {
+        if(fgtGcGameAppWelfare != null || !gameEntity.isGift()){
+            return;
+        }
+        fgtGcGameAppWelfare = FgtGcGameAppWelfare.newInstance(id);
+        fgtGcGameAppWelfare.setSmartRefreshLayout(refresh);
         fgtGcGameAppWelfare.loadData(gameEntity);
+        mAdapter.add(fgtGcGameAppWelfare, "福利");
+        viewPager.setOffscreenPageLimit(mAdapter.getCount());
     }
 
     //通过网络获取游戏数据并尝试加载
@@ -211,13 +220,18 @@ public class ActGcGameAppDetail extends BaseActivity {
         checkData(gameEntity);
         refreshData();
     }
+
     private int refreshDataCount = 0;
     //刷新数据
     public void refreshData(){
+        refreshData(viewPager.getCurrentItem());
+    }
+    //刷新数据
+    public void refreshData(int position){
         initDetailFromNet();
         boolean isRefresh = false;
         if (refreshDataCount != 0) {
-            Fragment item = mAdapter.getItem(viewPager.getCurrentItem());
+            Fragment item = mAdapter.getItem(position);
             if (item instanceof IRefresh) {//可刷新,就调用当前fragment刷新数据
                 ((IRefresh) item).refreshData();
                 isRefresh = true;
@@ -322,6 +336,17 @@ public class ActGcGameAppDetail extends BaseActivity {
     }
 
     @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        switch (requestCode){
+            case RequestCodeConstants.REQUEST_CODE_REFRESH:
+                if(resultCode == RESULT_OK)//发表评论成功
+                    refreshData(1);//需要刷新第二页的评论
+                break;
+        }
+    }
+
+    @Override
     protected void onDestroy() {
         super.onDestroy();
         EventBus.getDefault().unregister(this);

+ 25 - 15
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppDetail.java

@@ -33,6 +33,7 @@ import com.sheep.jiuyan.samllsheep.utils.G;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import butterknife.BindView;
 import rx.Observable;
@@ -76,13 +77,32 @@ public class FgtGcGameAppDetail extends BaseRefreshLoadMoreFragment implements A
         recyclerView.setNestedScrollingEnabled(false);
         recyclerView.setLayoutManager(new LinearLayoutManager(SheepApp.getInstance()));
         recyclerView.setAdapter(new AdpGcGameAppInfoList(gameInfoListArrayList));
+        refreshData();
     }
 
     //ActGcGameAppDetail调用该方法传入对应的游戏数据
-    public void loadData(GameEntity gameEntity) {
+    public void loadData(final GameEntity gameEntity) {
+        if(gc_game_app_detail_pic_list == null){
+            Observable.just(1).delay(100L, TimeUnit.MILLISECONDS)
+                    .subscribeOn(Schedulers.io())
+                    .observeOn(AndroidSchedulers.mainThread())
+                    .subscribe(new Action1<Integer>() {
+                        @Override
+                        public void call(Integer integer) {
+                            loadData(gameEntity);
+                        }
+                    });
+            return;
+        }
         GameApp gameApp;
         if (gameEntity == null || (gameApp = gameEntity.getApp()) == null)
             return;
+        ListUtil.removeItem(gameInfoListArrayList, new ListUtil.CallBack<GameInfoList, Boolean>() {
+            @Override
+            public Boolean call(GameInfoList gameInfoList) {
+                return SORT_GAME_INTRO == gameInfoList.getSort() || SORT_GAME_INFO == gameInfoList.getSort();
+            }
+        });
         //游戏图片banner
         String pictures = gameApp.getPictures();
         if (!TextUtils.isEmpty(pictures)) {
@@ -127,7 +147,7 @@ public class FgtGcGameAppDetail extends BaseRefreshLoadMoreFragment implements A
     }
 
     //加载相关游戏与热门试玩数据列表
-    private void initData(final int sort, final String name, Observable<BaseMessage> observable, final View.OnClickListener onClickListener) {
+    private void initData(final int sort, final String name, Observable<BaseMessage> observable) {
         observable.subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
@@ -135,7 +155,7 @@ public class FgtGcGameAppDetail extends BaseRefreshLoadMoreFragment implements A
                     public void onNext(BaseMessage baseMessage) {
                         ArrayList<GameApp> newList = baseMessage.getDataList(GameApp.class);
                         if (!ListUtil.isEmpty(newList)) {
-                            gameInfoListArrayList.add(new GameInfoList(name, new AdpGcGameAppList(SheepApp.getInstance(), R.layout.item_gc_game_app_63, newList), onClickListener).setHorizontal().setSort(sort));
+                            gameInfoListArrayList.add(new GameInfoList(name, new AdpGcGameAppList(SheepApp.getInstance(), R.layout.item_gc_game_app_63, newList)).setHorizontal().setSort(sort));
                             Collections.sort(gameInfoListArrayList);
                             recyclerView.getAdapter().notifyDataSetChanged();
                         }
@@ -166,18 +186,8 @@ public class FgtGcGameAppDetail extends BaseRefreshLoadMoreFragment implements A
                 return gameInfoList.getSort() == SORT_GAME_RELEVANT || gameInfoList.getSort() == SORT_GAME_HOT;
             }
         });
-        initData(SORT_GAME_RELEVANT, "相关游戏", SheepApp.getInstance().getNetComponent().getApiService().getDetailRelevantGames(appId), new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                G.showToast(R.string.coming_soon);
-            }
-        });
-        initData(SORT_GAME_HOT, "热门试玩", SheepApp.getInstance().getNetComponent().getApiService().getDetailHotGames(appId), new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                G.showToast(R.string.coming_soon);
-            }
-        });
+        initData(SORT_GAME_RELEVANT, "相关游戏", SheepApp.getInstance().getNetComponent().getApiService().getDetailRelevantGames(appId));
+        initData(SORT_GAME_HOT, "热门试玩", SheepApp.getInstance().getNetComponent().getApiService().getDetailHotGames(appId));
     }
 
     //评论列表数据

+ 1 - 1
app/src/main/java/org/afinal/simplecache/ApiKey.java

@@ -108,7 +108,7 @@ public class ApiKey {
 
     //发现模块游戏或应用详情
     public static String playGameDetail(int id) {
-        return "app/find?id=" + id;
+        return "app/find/" + id;
     }
 
     public static final String slideshowGame = "app/game_banner?platform=1";

+ 3 - 8
app/src/main/res/layout/act_comment_game_app.xml

@@ -70,7 +70,9 @@
             android:paddingBottom="20dp"
             android:textColor="#333333"
             android:textColorHint="#ffcccccc"
-            android:textSize="13sp" />
+            android:textSize="13sp" >
+            <requestFocus/>
+        </android.support.v7.widget.AppCompatEditText>
 
         <ImageView
             android:layout_width="50dp"
@@ -84,11 +86,4 @@
             android:src="@mipmap/x" />
     </RelativeLayout>
 
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:layout_marginStart="16dp"
-        android:layout_marginEnd="16dp"
-        android:background="#fff5f5f5" />
-
 </LinearLayout>