admin
2021-03-30 9acd7120f0943614ceb990af5124e0f907ef8f93
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package com.weikou.beibeivideo.ui.category.fragment;
 
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import android.widget.ListView;
import android.widget.ProgressBar;
 
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.lcjian.library.RetainViewFragment;
import com.umeng.analytics.MobclickAgent;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.ui.category.NewStarAdapter;
import com.weikou.beibeivideo.ui.category.bean.HotStar;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.widget.MySwipeRefreshLayout;
 
import org.apache.http.Header;
import org.json.JSONObject;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 明星fragment
 */
public class StarFragment extends RetainViewFragment {
    private MySwipeRefreshLayout rl_starView;
    private ListView starView;
    private int starPage = 1;
    private NewStarAdapter starAdapter;
    private List<HotStar> hotStars = new ArrayList<HotStar>();
    //判断网络请求是否成功,默认成功,避免二次执行请求
    private boolean isSucceed = true;
 
    /**
     * 获取热门明星数据
     */
    private void getHotStars() {
        SharedPreferences preferences = starView.getContext().getSharedPreferences(
                "user", Context.MODE_PRIVATE);
        String uid = preferences.getString("uid", "");
        BeibeiVideoAPI.getHotStars(starView.getContext(), uid,
                String.valueOf(starPage), new BasicTextHttpResponseHandler() {
                    @Override
                    public void onSuccessPerfect(int statusCode,
                                                 Header[] headers, JSONObject jsonObject)
                            throws Exception {
                        if (jsonObject.getBoolean("IsPost")) {
                            Gson gson = new GsonBuilder().setFieldNamingPolicy(
                                    FieldNamingPolicy.UPPER_CAMEL_CASE)
                                    .create();
                            List<HotStar> hotStarList = gson.fromJson(
                                    jsonObject.getJSONObject("Data")
                                            .getJSONArray("data").toString(),
                                    new TypeToken<List<HotStar>>() {
                                    }.getType());
                            if (starPage == 1) {
                                hotStars.clear();
                            }
                            // 数量小于服务器数量时 才增加分页和添加数据
                            if (hotStars.size() < jsonObject.getJSONObject(
                                    "Data").getInt("count")) {
                                starPage++;
                                /**
                                 * 特殊情况: 服务器上不要出现最后一个为一行的情况,否则会导致刷新异常。
                                 * 具体表现形式就是:上拉加载后,数据已添加,界面刷新,但是此时上拉不会显示出
                                 * 加载的新内容,而是继续保持上拉加载的状态,如果往上滑动一小段距离再滑回来
                                 * 才能显示出新内容。
                                 */
                                if (hotStarList.size() % 3 == 1) {// 单独一个的情况处理
                                    hotStarList.remove(hotStarList.size() - 1);//移除最后一个,添加其他的
                                    hotStars.addAll(hotStarList);
                                } else {
                                    hotStars.addAll(hotStarList);
                                }
                                starAdapter.notifyDataSetChanged();
                            }
                            isSucceed = true;
                        }
                    }
 
                    @Override
                    public void onFailure(int statusCode, Header[] headers,
                                          byte[] responseBytes, Throwable throwable) {
                        super.onFailure(statusCode, headers, responseBytes, throwable);
                        isSucceed = false;
                    }
 
                    @Override
                    public void onFinish() {
                        rl_starView.setRefreshing(false);
                        rl_starView.setLoading(false);
                    }
                });
    }
 
    @Override
    public int getContentResource() {
        return R.layout.category_star;
    }
 
    @Override
    public void onResume() {
        super.onResume();
        MobclickAgent.onPageStart("主界面—分类—明星");
    }
 
    @Override
    public void onPause() {
        super.onPause();
        MobclickAgent.onPageEnd("主界面—分类—明星");
    }
 
    @Override
    public void onCreateView(View contentView, Bundle savedInstanceState) {
        rl_starView =  contentView.findViewById(R.id.rl_starView);
        starView = (ListView) contentView.findViewById(R.id.star_ptrgv);
        starAdapter = new NewStarAdapter(hotStars, getContext());
        View view = new View(rl_starView.getContext());
        starView.addHeaderView(view);
        ProgressBar pb=new ProgressBar(rl_starView.getContext());
        rl_starView.setFooter(pb);
        starView.setAdapter(starAdapter);
        rl_starView.setRefreshing(true);
        rl_starView.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                starPage = 1;
                getHotStars();
            }
        });
 
        rl_starView.setOnLoadListener(new MySwipeRefreshLayout.OnLoadListener() {
            @Override
            public void onLoad() {
                getHotStars();
            }
        });
 
        getHotStars();
    }
 
    /**
     * 刷新明星页
     */
    public void refreshHotStars() {
        if (!isSucceed) {//没数据才刷新
            getHotStars();
        }
    }
}