Browse Source

主题详情页开发完成

huyuguo 6 years ago
parent
commit
43208863a3

+ 2 - 1
app/build.gradle

258
    compile 'com.android.support:appcompat-v7:26.1.0'
258
    compile 'com.android.support:appcompat-v7:26.1.0'
259
    compile 'com.android.support:design:26.1.0'
259
    compile 'com.android.support:design:26.1.0'
260
    //    compile 'com.nineoldandroids:library:2.4.0'
260
    //    compile 'com.nineoldandroids:library:2.4.0'
261
    compile 'com.github.bumptech.glide:glide:4.1.1'
261
//    compile 'com.github.bumptech.glide:glide:4.1.1'
262
    compile 'com.github.bumptech.glide:glide:4.2.0'
262
    compile 'me.iwf.photopicker:PhotoPicker:0.9.12@aar'
263
    compile 'me.iwf.photopicker:PhotoPicker:0.9.12@aar'
263
    compile 'top.zibin:Luban:1.1.2'
264
    compile 'top.zibin:Luban:1.1.2'
264
    compile 'com.ms-square:expandableTextView:0.1.4'
265
    compile 'com.ms-square:expandableTextView:0.1.4'

+ 104 - 8
app/src/main/java/com/electric/chargingpile/activity/TopicDetailActivity.java

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import android.content.Intent;
3
import android.os.Bundle;
4
import android.os.Bundle;
4
import android.support.annotation.Nullable;
5
import android.support.annotation.Nullable;
5
import android.support.v7.app.AppCompatActivity;
6
import android.support.v7.app.AppCompatActivity;
6
import android.support.v7.widget.RecyclerView;
7
import android.support.v7.widget.RecyclerView;
7
import android.support.v7.widget.StaggeredGridLayoutManager;
8
import android.support.v7.widget.StaggeredGridLayoutManager;
9
import android.text.TextUtils;
8
import android.util.Log;
10
import android.util.Log;
9
import android.view.View;
11
import android.view.View;
12
import android.widget.ImageView;
10
import android.widget.TextView;
13
import android.widget.TextView;
11
import android.widget.Toast;
14
import android.widget.Toast;
12
15
14
import com.electric.chargingpile.R;
17
import com.electric.chargingpile.R;
15
import com.electric.chargingpile.adapter.TopicDetailAdapter;
18
import com.electric.chargingpile.adapter.TopicDetailAdapter;
16
import com.electric.chargingpile.application.MainApplication;
19
import com.electric.chargingpile.application.MainApplication;
20
import com.electric.chargingpile.data.ChatRecommendBean;
17
import com.electric.chargingpile.data.HomePageBean;
21
import com.electric.chargingpile.data.HomePageBean;
18
import com.electric.chargingpile.iview.RecyclerItemTypeClickListener;
22
import com.electric.chargingpile.iview.RecyclerItemTypeClickListener;
23
import com.electric.chargingpile.manager.ProfileManager;
19
import com.electric.chargingpile.util.CommonParams;
24
import com.electric.chargingpile.util.CommonParams;
20
import com.electric.chargingpile.util.JsonUtils;
25
import com.electric.chargingpile.util.JsonUtils;
26
import com.electric.chargingpile.util.LoadingDialog;
21
import com.electric.chargingpile.util.NetUtil;
27
import com.electric.chargingpile.util.NetUtil;
22
import com.electric.chargingpile.util.ToastUtil;
28
import com.electric.chargingpile.util.ToastUtil;
23
import com.zhy.http.okhttp.OkHttpUtils;
29
import com.zhy.http.okhttp.OkHttpUtils;
33
 */
39
 */
34
public class TopicDetailActivity extends AppCompatActivity implements View.OnClickListener {
40
public class TopicDetailActivity extends AppCompatActivity implements View.OnClickListener {
35
    private static final String TAG = "TopicDetailActivity";
41
    private static final String TAG = "TopicDetailActivity";
42
    public static final int CLICK_PUBLISH_BTN_TOPIC = 1011;
36
    private TextView titleTextView;
43
    private TextView titleTextView;
37
    private XRefreshView xRefreshView;
44
    private XRefreshView xRefreshView;
38
    private RecyclerView recyclerView;
45
    private RecyclerView recyclerView;
46
    private LoadingDialog loadingDialog;
39
47
40
    private int topicId;
48
    private int topicId;
41
    private int sort = 1;
49
    private int sort = 1;
42
    private int page = 1;
50
    private int page = 1;
43
    private TopicDetailAdapter topicDetailAdapter;
51
    private TopicDetailAdapter topicDetailAdapter;
44
    private StaggeredGridLayoutManager staggeredGridLayoutManager;
52
    private StaggeredGridLayoutManager staggeredGridLayoutManager;
53
    public boolean isFirst = false;
54
    private ImageView chatPublishTips;
55
    private ImageView chatPublishIcon;
45
56
46
    @Override
57
    @Override
47
    protected void onCreate(@Nullable Bundle savedInstanceState) {
58
    protected void onCreate(@Nullable Bundle savedInstanceState) {
52
63
53
        if (NetUtil.CheckNetwork(this)) {
64
        if (NetUtil.CheckNetwork(this)) {
54
            xRefreshView.startRefresh();
65
            xRefreshView.startRefresh();
55
            requestData();
66
            requestData("1");
56
        } else {
67
        } else {
57
            // TODO by hyg
68
            // TODO by hyg
58
        }
69
        }
60
71
61
    private void initView() {
72
    private void initView() {
62
        topicId = getIntent().getIntExtra("topicId", 0);
73
        topicId = getIntent().getIntExtra("topicId", 0);
74
        loadingDialog = new LoadingDialog(TopicDetailActivity.this);
75
        loadingDialog.setCanceledOnTouchOutside(false);
76
63
        titleTextView = findViewById(R.id.titleTextView);
77
        titleTextView = findViewById(R.id.titleTextView);
64
        xRefreshView = findViewById(R.id.xRefreshView);
78
        xRefreshView = findViewById(R.id.xRefreshView);
65
        xRefreshView.setPullLoadEnable(true); // 允许加载更多
79
        xRefreshView.setPullLoadEnable(true); // 允许加载更多
66
        xRefreshView.setPinnedTime(1000);
80
        xRefreshView.setPinnedTime(0);
67
        xRefreshView.setMoveForHorizontal(true);
81
        xRefreshView.setMoveForHorizontal(true);
68
        xRefreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {
82
        xRefreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {
69
            @Override
83
            @Override
70
            public void onRefresh(boolean isPullDown) {
84
            public void onRefresh(boolean isPullDown) {
71
                super.onRefresh(isPullDown);
85
                super.onRefresh(isPullDown);
72
                page = 1;
86
                page = 1;
73
                requestData();
87
                requestData("1");
74
            }
88
            }
75
89
76
            @Override
90
            @Override
77
            public void onLoadMore(boolean isSilence) {
91
            public void onLoadMore(boolean isSilence) {
78
                super.onLoadMore(isSilence);
92
                super.onLoadMore(isSilence);
79
                page++;
93
                page++;
80
                requestData();
94
                requestData("0");
81
            }
95
            }
82
        });
96
        });
83
97
91
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
105
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
92
            @Override
106
            @Override
93
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
107
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
94
                // TODO by hyg 发布功能
108
                if (newState == RecyclerView.SCROLL_STATE_IDLE) {
109
                    chatPublishIcon.setVisibility(View.VISIBLE);
110
                    if (isFirst) {
111
                        chatPublishTips.setVisibility(View.VISIBLE);
112
                    }
113
                } else if (newState == RecyclerView.SCREEN_STATE_ON) {
114
                    chatPublishIcon.setVisibility(View.GONE);
115
                    if (isFirst) {
116
                        chatPublishTips.setVisibility(View.GONE);
117
                    }
118
                }
95
            }
119
            }
96
120
97
            @Override
121
            @Override
98
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
122
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
123
                super.onScrolled(recyclerView, dx, dy);
99
            }
124
            }
100
        });
125
        });
101
126
102
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
127
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
103
        recyclerView.setAdapter(topicDetailAdapter);
128
        recyclerView.setAdapter(topicDetailAdapter);
129
        recyclerView.addItemDecoration(new TopicDetailAdapter.ContentViewDecoration());
104
        topicDetailAdapter.setOnRecyclerItemClickListener(new RecyclerItemTypeClickListener() {
130
        topicDetailAdapter.setOnRecyclerItemClickListener(new RecyclerItemTypeClickListener() {
105
            @Override
131
            @Override
106
            public void onItemClickListener(int position, int index) {
132
            public void onItemClickListener(int position, int index) {
109
            }
135
            }
110
        });
136
        });
111
137
138
112
        topicDetailAdapter.setChooseTopicSortInterface(new TopicDetailAdapter.ChooseTopicSortInterface() {
139
        topicDetailAdapter.setChooseTopicSortInterface(new TopicDetailAdapter.ChooseTopicSortInterface() {
113
            @Override
140
            @Override
114
            public void chooseTopicSort(int s) {
141
            public void chooseTopicSort(int s) {
115
                sort = s;
142
                sort = s;
116
                page = 1;
143
                page = 1;
117
                requestData();
144
                requestData("1");
118
            }
145
            }
119
        });
146
        });
147
148
        chatPublishTips = findViewById(R.id.chatPublishTips);
149
        chatPublishIcon = findViewById(R.id.chatPublishIcon);
150
        chatPublishIcon.setOnClickListener(this);
151
152
        String clickedUserPublishTopic = ProfileManager.getInstance().getClickedUserPublishTopic(getApplicationContext());
153
        if (TextUtils.isEmpty(clickedUserPublishTopic)) {
154
            isFirst = true;
155
            chatPublishTips.setVisibility(View.VISIBLE);
156
        } else {
157
            chatPublishTips.setVisibility(View.GONE);
158
        }
120
    }
159
    }
121
160
122
    private void initListener() {
161
    private void initListener() {
133
            case R.id.shareTextView: // 右上角分享功能
172
            case R.id.shareTextView: // 右上角分享功能
134
                shareInfo();
173
                shareInfo();
135
                break;
174
                break;
175
            case R.id.chatPublishIcon: // 发布功能
176
                if (MainApplication.isLogin()) {
177
                    loginSign();
178
                } else {
179
                    startActivity(new Intent(getApplicationContext().getApplicationContext(), LoginActivity.class));
180
                    ToastUtil.showToast(getApplicationContext().getApplicationContext(), "请先登录", Toast.LENGTH_SHORT);
181
                }
182
                break;
136
        }
183
        }
137
184
138
    }
185
    }
141
        // TODO by hyg share information
188
        // TODO by hyg share information
142
    }
189
    }
143
190
144
    private void requestData() {
191
    // 服务器签名验证
192
    private void loginSign() {
193
        String url = MainApplication.urlNew + "/topic/sign.do";
194
        final Map<String, String> map = new HashMap<>();
195
        map.put("fileNames", "android");
196
        map.put("targetType", ChatRecommendBean.TARGET_TYPE_IMAGE_TEXT + "");
197
        CommonParams.addCommonParams(map);
198
        loadingDialog.show();
199
        OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
200
            @Override
201
            public void onError(Call call, Exception e) {
202
                loadingDialog.dismiss();
203
                ToastUtil.showToast(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT);
204
            }
205
206
            @Override
207
            public void onResponse(String response) {
208
                loadingDialog.dismiss();
209
                String code = JsonUtils.getKeyResult(response, "code");
210
                String desc = JsonUtils.getKeyResult(response, "desc");
211
                if ("1000".equals(code)) {
212
                    chatPublishTips.setVisibility(View.GONE);
213
                    ProfileManager.getInstance().setClickedUserPublishTopic(getApplicationContext(), "label");
214
                    isFirst = false;
215
                    startActivityForResult(new Intent(getApplicationContext(), PublishItemsActivity.class), CLICK_PUBLISH_BTN_TOPIC);
216
                } else if ("8010".equals(code)) {
217
                    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
218
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_LONG);
219
                } else {
220
                    ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
221
                }
222
            }
223
        });
224
225
    }
226
227
    private void requestData(String init) {
145
        String url = MainApplication.urlNew + "/topic/homepage.do";
228
        String url = MainApplication.urlNew + "/topic/homepage.do";
146
        Map<String, String> map = new HashMap<>();
229
        Map<String, String> map = new HashMap<>();
147
        map.put("topicId", topicId + "");
230
        map.put("topicId", topicId + "");
148
        map.put("sort", sort + "");              //   1:最新发布 2:最后回复 3:最热
231
        map.put("sort", sort + "");              //   1:最新发布 2:最后回复 3:最热
149
        map.put("init", "1");                   //   0:只返回话题下内容列表 1:返回话题名等信息
232
        map.put("init", init);                   //   0:只返回话题下内容列表 1:返回话题名等信息
150
        map.put("page", page + "");
233
        map.put("page", page + "");
151
        map.put("limit", "20");
234
        map.put("limit", "20");
152
        CommonParams.addCommonParams(map);
235
        CommonParams.addCommonParams(map);
174
                    HomePageBean homePageBean = (HomePageBean) JsonUtils.parseToObjectBean(data, HomePageBean.class);
257
                    HomePageBean homePageBean = (HomePageBean) JsonUtils.parseToObjectBean(data, HomePageBean.class);
175
                    if (page == 1) {
258
                    if (page == 1) {
176
                        xRefreshView.stopRefresh();
259
                        xRefreshView.stopRefresh();
260
                        xRefreshView.setLoadComplete(false);
177
                        topicDetailAdapter.setHeaderData(homePageBean.topicVo);
261
                        topicDetailAdapter.setHeaderData(homePageBean.topicVo);
178
                        topicDetailAdapter.setContentData(homePageBean.list);
262
                        topicDetailAdapter.setContentData(homePageBean.list);
263
264
                        if (homePageBean.list.size() == 0) {
265
                            topicDetailAdapter.setFooterData(true);
266
                        } else {
267
                            topicDetailAdapter.setFooterData(false);
268
                        }
179
                    } else {
269
                    } else {
270
                        if (homePageBean.list.size() == 0) {
271
                            topicDetailAdapter.setFooterData(true);
272
                            xRefreshView.setLoadComplete(true);
273
                        } else {
274
                            topicDetailAdapter.addContentData(homePageBean.list);
275
                        }
180
                        xRefreshView.stopLoadMore();
276
                        xRefreshView.stopLoadMore();
181
                    }
277
                    }
182
                } else {
278
                } else {

+ 114 - 13
app/src/main/java/com/electric/chargingpile/adapter/TopicDetailAdapter.java

2
2
3
import android.app.Activity;
3
import android.app.Activity;
4
import android.content.Context;
4
import android.content.Context;
5
import android.graphics.Rect;
5
import android.support.constraint.ConstraintLayout;
6
import android.support.constraint.ConstraintLayout;
6
import android.support.v7.widget.RecyclerView;
7
import android.support.v7.widget.RecyclerView;
7
import android.support.v7.widget.StaggeredGridLayoutManager;
8
import android.support.v7.widget.StaggeredGridLayoutManager;
22
import com.electric.chargingpile.iview.RecyclerItemTypeClickListener;
23
import com.electric.chargingpile.iview.RecyclerItemTypeClickListener;
23
import com.electric.chargingpile.util.CircleTransform;
24
import com.electric.chargingpile.util.CircleTransform;
24
import com.electric.chargingpile.util.CommonParams;
25
import com.electric.chargingpile.util.CommonParams;
26
import com.electric.chargingpile.util.DensityUtil;
25
import com.electric.chargingpile.util.ImageDisplayUtils;
27
import com.electric.chargingpile.util.ImageDisplayUtils;
26
import com.electric.chargingpile.util.JsonUtils;
28
import com.electric.chargingpile.util.JsonUtils;
29
import com.electric.chargingpile.util.ScreenUtils;
27
import com.electric.chargingpile.util.ToastUtil;
30
import com.electric.chargingpile.util.ToastUtil;
28
import com.electric.chargingpile.view.SortTopicPopWindow;
31
import com.electric.chargingpile.view.SortTopicPopWindow;
29
import com.squareup.picasso.Picasso;
32
import com.squareup.picasso.Picasso;
30
import com.zhy.http.okhttp.OkHttpUtils;
33
import com.zhy.http.okhttp.OkHttpUtils;
31
import com.zhy.http.okhttp.callback.StringCallback;
34
import com.zhy.http.okhttp.callback.StringCallback;
32
35
36
import org.w3c.dom.Text;
37
33
import java.util.ArrayList;
38
import java.util.ArrayList;
34
import java.util.HashMap;
39
import java.util.HashMap;
35
import java.util.List;
40
import java.util.List;
41
    private static final String TAG = "TopicDetailAdapter";
46
    private static final String TAG = "TopicDetailAdapter";
42
    public static final int TOPIC_DETAIL_HEADER = 1;
47
    public static final int TOPIC_DETAIL_HEADER = 1;
43
    public static final int TOPIC_DETAIL_CONTENT = 2;
48
    public static final int TOPIC_DETAIL_CONTENT = 2;
49
    public static final int TOPIC_DETAIL_FOOTER = 3;
44
    private int sort = 1;
50
    private int sort = 1;
45
    private Context context;
51
    private Context context;
46
    private Activity activity;
52
    private Activity activity;
49
    private HomePageBean.HomePageTopicBean topicDetailBean;
55
    private HomePageBean.HomePageTopicBean topicDetailBean;
50
    private RecyclerItemTypeClickListener onRecyclerItemClickListener;
56
    private RecyclerItemTypeClickListener onRecyclerItemClickListener;
51
    private ChooseTopicSortInterface chooseTopicSortInterface;
57
    private ChooseTopicSortInterface chooseTopicSortInterface;
58
    private final int screenWidth;
59
    private final int screenHeight;
60
    private final int statusHeight;
61
    private final int headerHeight;
62
    private int itemWidth;
63
    private boolean showFooter = false;
52
64
53
    public TopicDetailAdapter(Context context, Activity activity) {
65
    public TopicDetailAdapter(Context context, Activity activity) {
54
        this.context = context;
66
        this.context = context;
55
        this.activity = activity;
67
        this.activity = activity;
56
        this.layoutInflater = LayoutInflater.from(context);
68
        this.layoutInflater = LayoutInflater.from(context);
57
        beanLab = TopicDetailBeanLab.get(context);
69
        beanLab = TopicDetailBeanLab.get(context);
70
71
        screenWidth = ScreenUtils.getScreenWidth(context);
72
        screenHeight = ScreenUtils.getScreenHeight(context);
73
        statusHeight = ScreenUtils.getStatusHeight(context);
74
        headerHeight = DensityUtil.dip2px(context, 260);
75
        itemWidth = (screenWidth - DensityUtil.dip2px(context, 10 * 2)) / 2;
58
    }
76
    }
59
77
60
    @Override
78
    @Override
70
                itemView = layoutInflater.inflate(R.layout.activity_chat_content, parent, false);
88
                itemView = layoutInflater.inflate(R.layout.activity_chat_content, parent, false);
71
                viewHolder = new ContentViewHolder(itemView);
89
                viewHolder = new ContentViewHolder(itemView);
72
                break;
90
                break;
91
            case TOPIC_DETAIL_FOOTER:
92
                itemView = layoutInflater.inflate(R.layout.activity_chat_footer, parent, false);
93
                viewHolder = new FooterViewHolder(itemView);
94
                break;
73
        }
95
        }
74
        return viewHolder;
96
        return viewHolder;
75
    }
97
    }
76
98
77
    @Override
99
    @Override
78
    public void onBindViewHolder(IViewHolder viewHolder, int position) {
100
    public void onBindViewHolder(IViewHolder viewHolder, int position) {
79
        switch (viewHolder.getItemViewType()) {
101
        switch (getItemViewType(position)) {
80
            case TOPIC_DETAIL_HEADER:
102
            case TOPIC_DETAIL_HEADER:
81
                bindHeaderViewHolder(viewHolder, position);
103
                bindHeaderViewHolder(viewHolder, position);
82
                break;
104
                break;
83
            case TOPIC_DETAIL_CONTENT:
105
            case TOPIC_DETAIL_CONTENT:
84
                bindContentViewHolder(viewHolder, position);
106
                bindContentViewHolder(viewHolder, position);
85
                break;
107
                break;
108
            case TOPIC_DETAIL_FOOTER:
109
                bindFooterViewHolder(viewHolder, position);
110
                break;
86
        }
111
        }
87
    }
112
    }
88
113
89
    @Override
114
    @Override
90
    public int getItemCount() {
115
    public int getItemCount() {
91
        return beanLab.beans().size() + 1;
116
        return beanLab.beans().size() + 1 + 1;
92
    }
117
    }
93
118
94
    @Override
119
    @Override
95
    public int getItemViewType(int position) {
120
    public int getItemViewType(int position) {
96
        return position == 0 ? TOPIC_DETAIL_HEADER : TOPIC_DETAIL_CONTENT;
121
        if (position == 0) {
122
            return TOPIC_DETAIL_HEADER;
123
        } else if (position == getItemCount() - 1) {
124
            return TOPIC_DETAIL_FOOTER;
125
        } else {
126
            return TOPIC_DETAIL_CONTENT;
127
        }
97
    }
128
    }
98
129
99
    private void bindHeaderViewHolder(IViewHolder viewHolder, int position) {
130
    private void bindHeaderViewHolder(IViewHolder viewHolder, int position) {
126
                                sortPopWindow.dismiss();
157
                                sortPopWindow.dismiss();
127
                                headerViewHolder.sortTextView.setText("最新发布");
158
                                headerViewHolder.sortTextView.setText("最新发布");
128
                                headerViewHolder.chooseTopicSort(sort);
159
                                headerViewHolder.chooseTopicSort(sort);
129
//                                page = 1;
130
//                                requestData();
131
                                break;
160
                                break;
132
                            case R.id.tv_2:
161
                            case R.id.tv_2:
133
                                sort = 2;
162
                                sort = 2;
134
                                sortPopWindow.dismiss();
163
                                sortPopWindow.dismiss();
135
                                headerViewHolder.sortTextView.setText("最后回复");
164
                                headerViewHolder.sortTextView.setText("最后回复");
136
                                headerViewHolder.chooseTopicSort(sort);
165
                                headerViewHolder.chooseTopicSort(sort);
137
//                                page = 1;
138
//                                requestData();
139
                                break;
166
                                break;
140
                            case R.id.tv_3:
167
                            case R.id.tv_3:
141
                                sort = 3;
168
                                sort = 3;
142
                                sortPopWindow.dismiss();
169
                                sortPopWindow.dismiss();
143
                                headerViewHolder.sortTextView.setText("最热");
170
                                headerViewHolder.sortTextView.setText("最热");
144
                                headerViewHolder.chooseTopicSort(sort);
171
                                headerViewHolder.chooseTopicSort(sort);
145
//                                page = 1;
146
//                                requestData();
147
                                break;
172
                                break;
148
                        }
173
                        }
149
                    }
174
                    }
160
185
161
        final ChatRecommendBean bean = beans.get(position - 1);
186
        final ChatRecommendBean bean = beans.get(position - 1);
162
        ContentViewHolder contentViewHolder = (ContentViewHolder) viewHolder;
187
        ContentViewHolder contentViewHolder = (ContentViewHolder) viewHolder;
188
        ConstraintLayout.LayoutParams coverImageParams = (ConstraintLayout.LayoutParams) contentViewHolder.coverImage.getLayoutParams();
189
        coverImageParams.width = itemWidth;
190
191
        if (bean.coverImgW == 0 || bean.coverImgH == 0) {
192
            coverImageParams.height = (int) (itemWidth * 16f / 9f);
193
        } else {
194
            if ((float) bean.coverImgH / bean.coverImgW > 16f / 9f) {
195
                coverImageParams.height = (int) (itemWidth * 16f / 9f);
196
            } else {
197
                coverImageParams.height = (int) ((float) itemWidth * bean.coverImgH / bean.coverImgW);
198
            }
199
        }
200
        contentViewHolder.coverImage.setLayoutParams(coverImageParams);
163
        ImageDisplayUtils.dispalyImg(context, bean.coverImgUrl, contentViewHolder.coverImage);
201
        ImageDisplayUtils.dispalyImg(context, bean.coverImgUrl, contentViewHolder.coverImage);
164
        contentViewHolder.videoIcon.setVisibility(bean.targetType == ChatRecommendBean.TARGET_TYPE_VIDEO ? View.VISIBLE : View.GONE);
165
202
203
        contentViewHolder.videoIcon.setVisibility(bean.targetType == ChatRecommendBean.TARGET_TYPE_VIDEO ? View.VISIBLE : View.GONE);
166
        contentViewHolder.isTop.setVisibility(bean.isTop == 1 ? View.VISIBLE : View.GONE);
204
        contentViewHolder.isTop.setVisibility(bean.isTop == 1 ? View.VISIBLE : View.GONE);
167
        contentViewHolder.title.setText(bean.title);
205
        contentViewHolder.title.setText(bean.title);
168
        contentViewHolder.authorInfo.setOnClickListener(new View.OnClickListener() {
206
        contentViewHolder.authorInfo.setOnClickListener(new View.OnClickListener() {
248
        });
286
        });
249
    }
287
    }
250
288
289
    private void bindFooterViewHolder(IViewHolder viewHolder, final int position) {
290
        FooterViewHolder footerViewHolder = (FooterViewHolder) viewHolder;
291
        StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) footerViewHolder.footerContainer.getLayoutParams();
292
        layoutParams.setFullSpan(true);
293
294
        footerViewHolder.footerContainer.setVisibility(showFooter ? View.VISIBLE : View.GONE);
295
296
        ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) footerViewHolder.footerView.getLayoutParams();
297
        if (TopicDetailBeanLab.get(context).beans().size() == 0) {
298
            footerViewHolder.footTextView.setText("还没有任何内容哦,快来抢沙发~");
299
            params.height = DensityUtil.dip2px(context, (screenHeight - headerHeight - statusHeight) / 4);
300
            params.bottomMargin = 0;
301
        } else {
302
            footerViewHolder.footTextView.setText("已经全部加载完毕");
303
            params.height = DensityUtil.dip2px(context, 20);
304
            params.bottomMargin = DensityUtil.dip2px(context, 10);
305
        }
306
307
        if (showFooter == false) {
308
            params.height = 0;
309
            params.bottomMargin = DensityUtil.dip2px(context, 10);
310
        }
311
312
        footerViewHolder.footTextView.setLayoutParams(params);
313
    }
314
251
    private void showAuthorInfo(int position) {
315
    private void showAuthorInfo(int position) {
252
        // TODO
316
        // TODO
253
    }
317
    }
262
    public void addContentData(ArrayList<ChatRecommendBean> beans) {
326
    public void addContentData(ArrayList<ChatRecommendBean> beans) {
263
        int startSize = beanLab.beans().size();
327
        int startSize = beanLab.beans().size();
264
        beanLab.add(beans);
328
        beanLab.add(beans);
265
        int endSize = beanLab.beans().size();
266
        notifyItemRangeChanged(startSize, endSize);
329
        notifyItemRangeChanged(startSize, beans.size());
267
    }
330
    }
268
331
269
    public void setHeaderData(HomePageBean.HomePageTopicBean bean) {
332
    public void setHeaderData(HomePageBean.HomePageTopicBean bean) {
270
        topicDetailBean = bean;
333
        topicDetailBean = bean;
271
    }
334
    }
272
335
336
    public void setFooterData(Boolean showFooter) {
337
        this.showFooter = showFooter;
338
        notifyItemRangeChanged(getItemCount() - 1, 1);
339
    }
340
273
    class HeaderViewHolder extends IViewHolder {
341
    class HeaderViewHolder extends IViewHolder {
274
        ConstraintLayout topicDetailHeader;
342
        ConstraintLayout topicDetailHeader;
275
        ImageView headImage;
343
        ImageView headImage;
303
                chooseTopicSortInterface.chooseTopicSort(sort);
371
                chooseTopicSortInterface.chooseTopicSort(sort);
304
            }
372
            }
305
        }
373
        }
306
307
    }
374
    }
308
375
309
    public class ContentViewHolder extends IViewHolder {
376
    public class ContentViewHolder extends IViewHolder {
347
        }
414
        }
348
    }
415
    }
349
416
417
    public class FooterViewHolder extends IViewHolder {
418
419
        ConstraintLayout footerContainer;
420
        ConstraintLayout footerView;
421
        TextView footTextView;
422
423
        public FooterViewHolder(View itemView) {
424
            super(itemView);
425
            footerContainer = itemView.findViewById(R.id.footerContainer);
426
            footerView = itemView.findViewById(R.id.footerView);
427
            footTextView = itemView.findViewById(R.id.footTextView);
428
        }
429
    }
430
431
    public static class ContentViewDecoration extends RecyclerView.ItemDecoration {
432
        private StaggeredGridLayoutManager.LayoutParams layoutParams;
433
434
        @Override
435
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
436
            layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
437
            int position = parent.getChildAdapterPosition(view);
438
            if (position > 0) {
439
                if (layoutParams.getSpanIndex() % 2 == 0) {
440
                    outRect.left = DensityUtil.dip2px(view.getContext(), 15);
441
                    outRect.right = DensityUtil.dip2px(view.getContext(), 5);
442
                } else {
443
                    outRect.right = DensityUtil.dip2px(view.getContext(), 15);
444
                    outRect.left = DensityUtil.dip2px(view.getContext(), 5);
445
                }
446
            }
447
448
        }
449
    }
450
350
    public void setOnRecyclerItemClickListener(RecyclerItemTypeClickListener onRecyclerItemClickListener) {
451
    public void setOnRecyclerItemClickListener(RecyclerItemTypeClickListener onRecyclerItemClickListener) {
351
        this.onRecyclerItemClickListener = onRecyclerItemClickListener;
452
        this.onRecyclerItemClickListener = onRecyclerItemClickListener;
352
    }
453
    }

+ 5 - 5
app/src/main/java/com/electric/chargingpile/application/MainApplication.java

73
    public static String firstPoint = "";
73
    public static String firstPoint = "";
74
    public static Boolean firstSsyd;
74
    public static Boolean firstSsyd;
75
    public static String password = "";
75
    public static String password = "";
76
//    public static String url = "http://59.110.68.162";// 充电桩测试环境
77
    public static String url = "http://cdz.evcharge.cc";// 充电桩正式环境
78
//    public static String urlNew = "http://123.56.67.7:83/api/0200";// 一电测试环境
79
    public static String urlNew = "https://api.touchev.com:83/api/0200";// 一电正式环境
80
    public static String pic_url = "http://cdz.evcharge.cc/zhannew/uploadfile/";
76
    public static String url = "http://59.110.68.162";// 充电桩测试环境
77
//    public static String url = "http://cdz.evcharge.cc";// 充电桩正式环境
78
    public static String urlNew = "http://123.56.67.7:83/api/0200";// 一电测试环境
79
//    public static String urlNew = "https://api.touchev.com:83/api/0200";// 一电正式环境
80
    public static String pic_url = "http:/s/cdz.evcharge.cc/zhannew/uploadfile/";
81
    //	public static String url = "https://cdz.d1ev.com";
81
    //	public static String url = "https://cdz.d1ev.com";
82
    public static String build_flag = "0";
82
    public static String build_flag = "0";
83
    public static String support = "0";
83
    public static String support = "0";

+ 11 - 0
app/src/main/java/com/electric/chargingpile/manager/ProfileManager.java

60
    private static final String KEY_DATA_UPTIME = "key_data_uptime";
60
    private static final String KEY_DATA_UPTIME = "key_data_uptime";
61
    private static final String KEY_FIND_DATE = "key_find_date";
61
    private static final String KEY_FIND_DATE = "key_find_date";
62
    private static final String KEY_ADD_COME_FIRST = "key_add_come_first";
62
    private static final String KEY_ADD_COME_FIRST = "key_add_come_first";
63
    private static final String KEY_CLICKED_USER_PUBLISH_TOPIC = "key_clicked_user_publish_topic";
63
    private static final String KEY_CLICKED_USER_PUBLISH_ROLE = "key_clicked_user_publish_role";
64
    private static final String KEY_CLICKED_USER_PUBLISH_ROLE = "key_clicked_user_publish_role";
64

65

65
    private static ProfileManager instance;
66
    private static ProfileManager instance;
187
                .putString(KEY_ADD_COME_FIRST, content);
188
                .putString(KEY_ADD_COME_FIRST, content);
188
    }
189
    }
189

190

191
    public void setClickedUserPublishTopic(Context context, String content) {
192
        PreferenceManager.getInstance(context)
193
                .putString(KEY_CLICKED_USER_PUBLISH_TOPIC, content);
194
    }
195

190
    public void setClickedUserPublishRole(Context context, String content) {
196
    public void setClickedUserPublishRole(Context context, String content) {
191
        PreferenceManager.getInstance(context)
197
        PreferenceManager.getInstance(context)
192
                .putString(KEY_CLICKED_USER_PUBLISH_ROLE, content);
198
                .putString(KEY_CLICKED_USER_PUBLISH_ROLE, content);
505
                "");
511
                "");
506
    }
512
    }
507

513

514
    public String getClickedUserPublishTopic(Context context) {
515
        return PreferenceManager.getInstance(context).getString(KEY_CLICKED_USER_PUBLISH_TOPIC,
516
                "");
517
    }
518

508
    public String getClickedUserPublishRole(Context context) {
519
    public String getClickedUserPublishRole(Context context) {
509
        return PreferenceManager.getInstance(context).getString(KEY_CLICKED_USER_PUBLISH_ROLE,
520
        return PreferenceManager.getInstance(context).getString(KEY_CLICKED_USER_PUBLISH_ROLE,
510
                "");
521
                "");

+ 9 - 10
app/src/main/res/layout/activity_chat_content.xml

18
18
19
        <ImageView
19
        <ImageView
20
            android:id="@+id/coverImage"
20
            android:id="@+id/coverImage"
21
            android:layout_width="168dp"
22
            android:layout_height="147dp"
21
            android:layout_width="wrap_content"
22
            android:layout_height="wrap_content"
23
            android:contentDescription="信息图片"
23
            android:contentDescription="信息图片"
24
            android:scaleType="fitXY"
24
            app:layout_constraintEnd_toEndOf="parent"
25
            app:layout_constraintEnd_toEndOf="parent"
25
            app:layout_constraintStart_toStartOf="parent"
26
            app:layout_constraintStart_toStartOf="parent"
26
            app:layout_constraintTop_toTopOf="parent"
27
            app:layout_constraintTop_toTopOf="parent"
59
            android:id="@+id/title"
60
            android:id="@+id/title"
60
            android:layout_width="0dp"
61
            android:layout_width="0dp"
61
            android:layout_height="wrap_content"
62
            android:layout_height="wrap_content"
62
            android:layout_marginLeft="10dp"
63
            android:layout_marginTop="10dp"
64
            android:layout_marginRight="10dp"
63
            android:paddingLeft="10dp"
64
            android:paddingRight="10dp"
65
            android:paddingTop="10dp"
65
            android:ellipsize="end"
66
            android:ellipsize="end"
66
            android:maxLines="2"
67
            android:maxLines="3"
67
            android:textColor="#222222"
68
            android:textColor="#222222"
68
            android:textSize="15sp"
69
            android:textSize="15sp"
69
            app:layout_constraintEnd_toEndOf="parent"
70
            app:layout_constraintEnd_toEndOf="parent"
74
        <android.support.constraint.ConstraintLayout
75
        <android.support.constraint.ConstraintLayout
75
            android:layout_width="0dp"
76
            android:layout_width="0dp"
76
            android:layout_height="48dp"
77
            android:layout_height="48dp"
78
            android:paddingLeft="10dp"
79
            android:paddingRight="10dp"
77
            app:layout_constraintLeft_toLeftOf="parent"
80
            app:layout_constraintLeft_toLeftOf="parent"
78
            app:layout_constraintRight_toRightOf="parent"
81
            app:layout_constraintRight_toRightOf="parent"
79
            app:layout_constraintTop_toBottomOf="@+id/title">
82
            app:layout_constraintTop_toBottomOf="@+id/title">
82
                android:id="@+id/authorInfo"
85
                android:id="@+id/authorInfo"
83
                android:layout_width="wrap_content"
86
                android:layout_width="wrap_content"
84
                android:layout_height="0dp"
87
                android:layout_height="0dp"
85
                android:paddingLeft="10dp"
86
                android:paddingRight="10dp"
87
                app:layout_constraintBottom_toBottomOf="parent"
88
                app:layout_constraintBottom_toBottomOf="parent"
88
                app:layout_constraintLeft_toLeftOf="parent"
89
                app:layout_constraintLeft_toLeftOf="parent"
89
                app:layout_constraintTop_toTopOf="parent">
90
                app:layout_constraintTop_toTopOf="parent">
114
                android:id="@+id/likeInfo"
115
                android:id="@+id/likeInfo"
115
                android:layout_width="wrap_content"
116
                android:layout_width="wrap_content"
116
                android:layout_height="0dp"
117
                android:layout_height="0dp"
117
                android:paddingLeft="10dp"
118
                android:paddingRight="10dp"
119
                app:layout_constraintBottom_toBottomOf="parent"
118
                app:layout_constraintBottom_toBottomOf="parent"
120
                app:layout_constraintRight_toRightOf="parent"
119
                app:layout_constraintRight_toRightOf="parent"
121
                app:layout_constraintTop_toTopOf="parent">
120
                app:layout_constraintTop_toTopOf="parent">

+ 34 - 0
app/src/main/res/layout/activity_chat_footer.xml

1
<?xml version="1.0" encoding="utf-8"?>
2
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
    xmlns:app="http://schemas.android.com/apk/res-auto"
4
    xmlns:tools="http://schemas.android.com/tools"
5
    android:id="@+id/footerContainer"
6
    android:layout_width="match_parent"
7
    android:layout_height="wrap_content">
8
9
    <android.support.constraint.ConstraintLayout
10
        android:id="@+id/footerView"
11
        android:layout_width="match_parent"
12
        android:layout_height="20dp"
13
        app:layout_constraintBottom_toBottomOf="parent"
14
        app:layout_constraintEnd_toEndOf="parent"
15
        app:layout_constraintStart_toStartOf="parent"
16
        app:layout_constraintTop_toTopOf="parent">
17
18
        <TextView
19
            android:id="@+id/footTextView"
20
            android:layout_width="match_parent"
21
            android:layout_height="match_parent"
22
            android:gravity="center"
23
            android:paddingLeft="30dp"
24
            android:paddingRight="30dp"
25
            android:textColor="#555555"
26
            android:textSize="14sp"
27
            app:layout_constraintBottom_toBottomOf="parent"
28
            app:layout_constraintEnd_toEndOf="parent"
29
            app:layout_constraintStart_toStartOf="parent"
30
            app:layout_constraintTop_toTopOf="parent"
31
            tools:text="已经全部加载完毕" />
32
    </android.support.constraint.ConstraintLayout>
33
34
</android.support.constraint.ConstraintLayout>

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

74
            android:layout_width="match_parent"
74
            android:layout_width="match_parent"
75
            android:layout_height="match_parent"
75
            android:layout_height="match_parent"
76
            android:scrollbars="vertical" />
76
            android:scrollbars="vertical" />
77
78
    </com.andview.refreshview.XRefreshView>
77
    </com.andview.refreshview.XRefreshView>
79
78
80
    <ImageView
79
    <ImageView

+ 2 - 1
zxing/build.gradle

29
    })
29
    })
30
    compile 'pub.devrel:easypermissions:0.2.0'
30
    compile 'pub.devrel:easypermissions:0.2.0'
31
    compile 'com.google.code.gson:gson:2.2.4'
31
    compile 'com.google.code.gson:gson:2.2.4'
32
    compile 'com.github.bumptech.glide:glide:4.1.1'
32
//    compile 'com.github.bumptech.glide:glide:4.1.1'
33
    compile 'com.github.bumptech.glide:glide:4.2.0'
33
    compile 'com.google.zxing:core:+'
34
    compile 'com.google.zxing:core:+'
34
    compile 'com.google.zxing:android-core:+'
35
    compile 'com.google.zxing:android-core:+'
35
    compile 'com.blankj:utilcode:1.9.8'
36
    compile 'com.blankj:utilcode:1.9.8'