Browse Source

话题列表相关开发完成

huyuguo 5 years ago
parent
commit
9129792ec2

+ 1 - 0
app/src/main/java/com/electric/chargingpile/activity/UserPageActivity.java

@ -261,6 +261,7 @@ public class UserPageActivity extends AppCompatActivity implements View.OnClickL
261 261
                    if (page == 1) {
262 262
                        xRefreshView.stopRefresh();
263 263
                    } else {
264
                        page--;
264 265
                        xRefreshView.stopLoadMore();
265 266
                    }
266 267
                }

+ 163 - 205
app/src/main/java/com/electric/chargingpile/adapter/ChatRecommendAdapter.java

@ -2,6 +2,7 @@ package com.electric.chargingpile.adapter;
2 2
3 3
import android.content.Context;
4 4
import android.content.Intent;
5
import android.support.constraint.ConstraintLayout;
5 6
import android.support.v7.widget.LinearLayoutManager;
6 7
import android.support.v7.widget.RecyclerView;
7 8
import android.support.v7.widget.StaggeredGridLayoutManager;
@ -20,7 +21,9 @@ import com.aspsine.irecyclerview.IViewHolder;
20 21
import com.electric.chargingpile.R;
21 22
import com.electric.chargingpile.activity.TopicDetailActivity;
22 23
import com.electric.chargingpile.application.MainApplication;
24
import com.electric.chargingpile.data.ChatBeanLab;
23 25
import com.electric.chargingpile.data.ChatRecommendBean;
26
import com.electric.chargingpile.data.TopicDetailBeanLab;
24 27
import com.electric.chargingpile.iview.RecyclerItemTypeClickListener;
25 28
import com.electric.chargingpile.util.CircleTransform;
26 29
import com.electric.chargingpile.util.CommonParams;
@ -35,53 +38,58 @@ import com.zhy.http.okhttp.callback.StringCallback;
35 38
36 39
import java.util.ArrayList;
37 40
import java.util.HashMap;
41
import java.util.List;
38 42
import java.util.Map;
39 43
40 44
import okhttp3.Call;
41 45
42 46
public class ChatRecommendAdapter extends RecyclerView.Adapter<IViewHolder> {
43 47
    private static final String TAG = "ChatRecommendAdapter";
44
    private static final int TYPE_HEADER = 1, TYPE_ITEM = 2;
48
    private static final int TYPE_HEADER = 1, TYPE_ITEM = 2, TYPE_FOOTER = 3;
45 49
    private Context context;
46 50
    private final LayoutInflater layoutInflater;
47
    private ArrayList<ChatRecommendBean> chatRecommendBeans;
48 51
    private ArrayList<ChatRecommendBean> chatHeaderRecommendBeans;
49 52
    private final int screenWidth;
50
    private int talkItemWidth;
53
    private int itemWidth;
51 54
    private OnItemClickListener onItemClickListener;
52 55
    private RecyclerItemTypeClickListener onRecyclerItemClickListener;
56
    private final ChatBeanLab beanLab;
57
    private boolean showFooter = false;
53 58
54 59
    public ChatRecommendAdapter(Context context) {
55 60
        this.context = context;
61
        beanLab = ChatBeanLab.get(context);
62
56 63
        layoutInflater = LayoutInflater.from(context);
57
        chatRecommendBeans = new ArrayList<>();
58 64
        chatHeaderRecommendBeans = new ArrayList<>();
59 65
        screenWidth = ScreenUtils.getScreenWidth(context);
60
        talkItemWidth = (screenWidth - DensityUtil.dip2px(context, 10 * 2)) / 2;
66
        itemWidth = (screenWidth - DensityUtil.dip2px(context, 20 * 2)) / 2;
61 67
    }
62 68
63 69
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
64 70
        this.onItemClickListener = onItemClickListener;
65 71
    }
66 72
67
    public void setData(ArrayList<ChatRecommendBean> data) {
68
        chatRecommendBeans = data;
69
        notifyItemRangeInserted(0, chatHeaderRecommendBeans.size() + chatRecommendBeans.size());
73
    public void setData(ArrayList<ChatRecommendBean> beans) {
74
        beanLab.clear();
75
        beanLab.add(beans);
76
        notifyItemRangeInserted(1, beanLab.beans().size());
70 77
    }
71 78
72
    public void addData(ArrayList<ChatRecommendBean> data) {
73
        int size = chatRecommendBeans.size();
74
        chatRecommendBeans.addAll(data);
75
        notifyItemRangeInserted(size, chatRecommendBeans.size());
79
    public void addData(ArrayList<ChatRecommendBean> beans) {
80
        int size = beanLab.beans().size();
81
        beanLab.add(beans);
82
        notifyItemRangeInserted(size + 1, beans.size());
76 83
    }
77 84
78
    public ArrayList<ChatRecommendBean> getCurrentData() {
79
        return chatRecommendBeans;
85
    public void setFooterData(Boolean showFooter) {
86
        this.showFooter = showFooter;
87
        notifyItemRangeChanged(getItemCount() - 1, 1);
80 88
    }
81 89
82 90
    public void setHeaderData(ArrayList<ChatRecommendBean> data) {
83
        chatRecommendBeans.clear();
84 91
        chatHeaderRecommendBeans = data;
92
        notifyItemChanged(0);
85 93
    }
86 94
87 95
    public void setOnRecyclerItemClickListener(RecyclerItemTypeClickListener onRecyclerItemClickListener) {
@ -90,146 +98,194 @@ public class ChatRecommendAdapter extends RecyclerView.Adapter<IViewHolder> {
90 98
91 99
    @Override
92 100
    public int getItemViewType(int position) {
93
        // 位置为0的话类型为头部,其余为内容
94
        return position = position == 0 ? TYPE_HEADER : TYPE_ITEM;
101
        if (position == 0) {
102
            return TYPE_HEADER;
103
        } else if (position == getItemCount() - 1) {
104
            return TYPE_FOOTER;
105
        } else {
106
            return TYPE_ITEM;
107
        }
95 108
    }
96 109
97 110
    @Override
98 111
    public int getItemCount() {
99
        // 加一是因为添加了头部
100
        return chatRecommendBeans.size() + 1;
112
        return beanLab.beans().size() + 1 + 1;
101 113
    }
102 114
103 115
    @Override
104 116
    public IViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
105
        View view = null;
106
        IViewHolder holer = null;
117
        View itemView = null;
118
        IViewHolder viewHolder = null;
107 119
        switch (viewType) {
108 120
            case TYPE_HEADER:
109
                view = layoutInflater.inflate(R.layout.view_chat_header_recommend, parent, false);
110
                holer = new SimpleHeaderViewHolder(view);
121
                itemView = layoutInflater.inflate(R.layout.view_chat_header_recommend, parent, false);
122
                viewHolder = new SimpleHeaderViewHolder(itemView);
111 123
                break;
112 124
            case TYPE_ITEM:
113
                view = layoutInflater.inflate(R.layout.view_chat_recommend, parent, false);
114
                holer = new SimpleViewHolder(view);
125
                itemView = layoutInflater.inflate(R.layout.activity_chat_content, parent, false);
126
                viewHolder = new TopicDetailAdapter.ContentViewHolder(itemView);
127
                break;
128
            case TYPE_FOOTER:
129
                itemView = layoutInflater.inflate(R.layout.activity_chat_footer, parent, false);
130
                viewHolder = new TopicDetailAdapter.FooterViewHolder(itemView);
115 131
                break;
116 132
        }
117
        return holer;
133
        return viewHolder;
118 134
    }
119 135
120 136
    @Override
121 137
    public void onBindViewHolder(IViewHolder holder, int position) {
122 138
        switch (holder.getItemViewType()) {
123 139
            case TYPE_HEADER: // 话题列表设置
124
                setHeaderHolder(holder, position);
140
                bindHeaderViewHolder(holder, position);
125 141
                break;
126 142
            case TYPE_ITEM: // 信息列表设置
127
                setListHolder(holder, position);
143
                bindContentViewHolder(holder, position);
144
                break;
145
            case TYPE_FOOTER:
128 146
                break;
129 147
        }
130 148
    }
131 149
132
    private void setListHolder(IViewHolder holder, final int position) {
133
134
        final ChatRecommendBean chatRecommendBean = chatRecommendBeans.get(position - 1);
135
        SimpleViewHolder simpleViewHolder = (SimpleViewHolder) holder;
136
        simpleViewHolder.index = position - 1;
137
        RelativeLayout.LayoutParams bgParams = (RelativeLayout.LayoutParams) simpleViewHolder.info_bg_icon.getLayoutParams();
138
        bgParams.width = talkItemWidth;
139
140
        if (chatRecommendBean.targetType == ChatRecommendBean.TARGET_TYPE_IMAGE_TOPIC) { // 话题
141
            bgParams.height = (int) (talkItemWidth * 365f / 480f);
142
            simpleViewHolder.bottom_view.setVisibility(View.GONE);
143
            simpleViewHolder.topic_back.setVisibility(View.VISIBLE);
144
            simpleViewHolder.recycler_view_title.setVisibility(View.GONE);
145
            simpleViewHolder.topic_title.setVisibility(View.VISIBLE);
146
147
            // 设置话题半透明层
148
            RelativeLayout.LayoutParams tbParams = (RelativeLayout.LayoutParams) simpleViewHolder.topic_back.getLayoutParams();
149
            tbParams.height = bgParams.height;
150
            tbParams.width = bgParams.width;
151
            simpleViewHolder.topic_back.setLayoutParams(tbParams);
152
            // 设置话题标题
153
            simpleViewHolder.topic_title.setText(chatRecommendBean.title);
154
150
    private void bindContentViewHolder(IViewHolder viewHolder, final int position) {
151
        final ChatRecommendBean bean = beanLab.beans().get(position - 1);
152
        TopicDetailAdapter.ContentViewHolder contentViewHolder = (TopicDetailAdapter.ContentViewHolder) viewHolder;
153
        ConstraintLayout.LayoutParams coverImageParams = (ConstraintLayout.LayoutParams) contentViewHolder.coverImage.getLayoutParams();
154
        coverImageParams.width = itemWidth;
155
156
        if (bean.targetType == ChatRecommendBean.TARGET_TYPE_IMAGE_TOPIC) {
157
            contentViewHolder.topic_item.setVisibility(View.VISIBLE);
158
            contentViewHolder.image_video_item.setVisibility(View.GONE);
159
            ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams)contentViewHolder.topicCoverImage.getLayoutParams();
160
            params.width = itemWidth;
161
            params.height = (int) (itemWidth * 365f / 480f);
162
            contentViewHolder.topicCoverImage.setLayoutParams(params);
163
            ImageDisplayUtils.dispalyImg(context, bean.coverImgUrl, contentViewHolder.topicCoverImage);
164
            contentViewHolder.topicTitle.setText(bean.title);
155 165
        } else {
156
            if (chatRecommendBean.coverImgW == 0 || chatRecommendBean.coverImgH == 0) {
157
                bgParams.height = (int) (talkItemWidth * 16f / 9f);
166
            contentViewHolder.topic_item.setVisibility(View.GONE);
167
            contentViewHolder.image_video_item.setVisibility(View.VISIBLE);
168
            if (bean.coverImgW == 0 || bean.coverImgH == 0) {
169
                coverImageParams.height = (int) (itemWidth * 16f / 9f);
158 170
            } else {
159
                if ((float) chatRecommendBean.coverImgH / chatRecommendBean.coverImgW > 16f / 9f) {
160
                    bgParams.height = (int) (talkItemWidth * 16f / 9f);
171
                if ((float) bean.coverImgH / bean.coverImgW > 16f / 9f) {
172
                    coverImageParams.height = (int) (itemWidth * 16f / 9f);
161 173
                } else {
162
                    bgParams.height = (int) ((float) talkItemWidth * chatRecommendBean.coverImgH / chatRecommendBean.coverImgW);
174
                    coverImageParams.height = (int) ((float) itemWidth * bean.coverImgH / bean.coverImgW);
163 175
                }
164 176
            }
165
            simpleViewHolder.bottom_view.setVisibility(View.VISIBLE);
166
            simpleViewHolder.topic_back.setVisibility(View.GONE);
167
            simpleViewHolder.recycler_view_title.setVisibility(View.VISIBLE);
168
            simpleViewHolder.topic_title.setVisibility(View.GONE);
169
            // 红心点赞
170
            if (chatRecommendBean.likeFlg == 0) {
171
                simpleViewHolder.recycler_view_zan_icon.setBackgroundResource(R.drawable.app_talk_main_list_zan_icon);
177
            contentViewHolder.coverImage.setLayoutParams(coverImageParams);
178
            ImageDisplayUtils.dispalyImg(context, bean.coverImgUrl, contentViewHolder.coverImage);
179
180
            contentViewHolder.videoIcon.setVisibility(bean.targetType == ChatRecommendBean.TARGET_TYPE_VIDEO ? View.VISIBLE : View.GONE);
181
            contentViewHolder.isTop.setVisibility(bean.isTop == 1 ? View.VISIBLE : View.GONE);
182
            if (TextUtils.isEmpty(bean.title)) {
183
                contentViewHolder.title.setText("分享内容");
172 184
            } else {
173
                simpleViewHolder.recycler_view_zan_icon.setBackgroundResource(R.drawable.app_talk_main_list_zan_red_icon);
185
                contentViewHolder.title.setText(bean.title);
174 186
            }
175
            // 标题设置
176
            if (TextUtils.isEmpty(chatRecommendBean.title)) {
177
                simpleViewHolder.recycler_view_title.setText("分享内容");
187
188
            if (TextUtils.isEmpty(bean.headImgUrl)) {
189
                Picasso.with(context)
190
                        .load(R.drawable.icon_face2_0)
191
                        .placeholder(R.drawable.icon_face2_0)
192
                        .error(R.drawable.icon_face2_0)
193
                        .transform(new CircleTransform())
194
                        .into(contentViewHolder.headImage);
178 195
            } else {
179
                simpleViewHolder.recycler_view_title.setText(chatRecommendBean.title);
196
                Picasso.with(context)
197
                        .load("http://cdz.evcharge.cc/zhannew/uploadfile/" + bean.headImgUrl)
198
                        .placeholder(R.drawable.icon_face2_0)
199
                        .error(R.drawable.icon_face2_0)
200
                        .transform(new CircleTransform())
201
                        .into(contentViewHolder.headImage);
180 202
            }
181 203
182
            if (chatRecommendBean.likeNums == 0) {
183
                simpleViewHolder.recycler_view_zan.setVisibility(View.GONE);
184
                LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) simpleViewHolder.recycler_view_zan_icon.getLayoutParams();
185
                params.rightMargin = DensityUtil.dip2px(context, 10);
186
                simpleViewHolder.recycler_view_zan_icon.setLayoutParams(params);
187
            } else if (chatRecommendBean.likeNums > 999) {
188
                simpleViewHolder.recycler_view_zan.setVisibility(View.VISIBLE);
189
                simpleViewHolder.recycler_view_zan.setText("999+");
204
            contentViewHolder.nickName.setText(bean.nickName);
205
            contentViewHolder.likeInfo.setOnClickListener(new View.OnClickListener() {
206
                @Override
207
                public void onClick(View view) {
208
                    if (bean.likeFlg == 0) {
209
                        doLike(position);
210
                    }
211
                }
212
            });
213
214
            if (bean.likeFlg == 1) {
215
                contentViewHolder.likeIcon.setBackgroundResource(R.drawable.app_talk_main_list_zan_red_icon);
190 216
            } else {
191
                simpleViewHolder.recycler_view_zan.setVisibility(View.VISIBLE);
192
                simpleViewHolder.recycler_view_zan.setText(chatRecommendBean.likeNums + "");
217
                contentViewHolder.likeIcon.setBackgroundResource(R.drawable.app_talk_main_list_zan_icon);
193 218
            }
194 219
195
            simpleViewHolder.user_avater_name.setText(chatRecommendBean.nickName);
220
            int likeNum = bean.likeNums;
221
            if (likeNum > 0) {
222
                contentViewHolder.likeNum.setVisibility(View.VISIBLE);
223
                contentViewHolder.likeNum.setText(likeNum < 999 ? likeNum + "" : "999+");
224
            } else {
225
                contentViewHolder.likeNum.setVisibility(View.GONE);
226
            }
196 227
        }
197 228
198
        if (chatRecommendBean.isTop == 0) {
199
            simpleViewHolder.is_top_view.setVisibility(View.GONE);
200
        } else {
201
            simpleViewHolder.is_top_view.setBackgroundResource(R.drawable.corner_view);
202
            simpleViewHolder.is_top_view.setVisibility(View.VISIBLE);
203
        }
229
    }
204 230
205
        if (chatRecommendBean.targetType == ChatRecommendBean.TARGET_TYPE_VIDEO) {
206
            simpleViewHolder.info_id_video_icon.setVisibility(View.VISIBLE);
207
        } else {
208
            simpleViewHolder.info_id_video_icon.setVisibility(View.GONE);
209
        }
210
        simpleViewHolder.info_bg_icon.setLayoutParams(bgParams);
231
    /**
232
     * 点赞操作
233
     *
234
     * @param position
235
     */
236
    private void doLike(final int position) {
237
        final ChatRecommendBean bean = beanLab.beans().get(position - 1);
238
        String url = MainApplication.urlNew + "/topic/like.do";
239
        Map<String, String> map = new HashMap<>();
240
        map.put("targetId", bean.targetId + "");
241
        map.put("targetType", bean.targetType + "");
242
        map.put("flag", "1");
243
        map.put("authorId", bean.addUserId + "");
244
        CommonParams.addCommonParams(map);
245
246
        OkHttpUtils.get().url(url).params(map).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
247
            @Override
248
            public void onError(Call call, Exception e) {
249
                ToastUtil.showToast(context, "点赞失败,请重试", Toast.LENGTH_SHORT);
250
            }
251
252
            @Override
253
            public void onResponse(String res) {
254
                String code = JsonUtils.getKeyResult(res, "code");
255
                String desc = JsonUtils.getKeyResult(res, "desc");
256
                if ("1000".equals(code)) {
257
                    bean.likeFlg = 1;
258
                    bean.likeNums += 1;
259
                    notifyItemChanged(position);
260
                } else {
261
                    ToastUtil.showToast(context, desc, Toast.LENGTH_SHORT);
262
                }
263
            }
264
        });
265
    }
211 266
212
        ImageDisplayUtils.dispalyImg(context, chatRecommendBean.coverImgUrl, simpleViewHolder.info_bg_icon);
267
    private void bindFooterViewHolder(IViewHolder viewHolder, final int position) {
268
        TopicDetailAdapter.FooterViewHolder footerViewHolder = (TopicDetailAdapter.FooterViewHolder) viewHolder;
269
        StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) footerViewHolder.footerContainer.getLayoutParams();
270
        layoutParams.setFullSpan(true);
213 271
214
        if (TextUtils.isEmpty(chatRecommendBean.headImgUrl)) {
215
            Picasso.with(context)
216
                    .load(R.drawable.icon_face2_0)
217
                    .placeholder(R.drawable.icon_face2_0)
218
                    .error(R.drawable.icon_face2_0)
219
                    .transform(new CircleTransform())
220
                    .into(simpleViewHolder.user_avater);
272
        footerViewHolder.footerContainer.setVisibility(showFooter ? View.VISIBLE : View.GONE);
273
274
        ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) footerViewHolder.footerView.getLayoutParams();
275
276
        if (beanLab.beans().size() == 0) {
277
            params.height = DensityUtil.dip2px(context, 230);
278
            footerViewHolder.footTextView.setText("还没有任何内容哦,快来抢沙发~");
221 279
        } else {
222
            Picasso.with(context)
223
                    .load("http://cdz.evcharge.cc/zhannew/uploadfile/" + chatRecommendBean.headImgUrl)
224
                    .placeholder(R.drawable.icon_face2_0)
225
                    .error(R.drawable.icon_face2_0)
226
                    .transform(new CircleTransform())
227
                    .into(simpleViewHolder.user_avater);
280
            footerViewHolder.footTextView.setText("已经全部加载完毕");
281
            params.height = DensityUtil.dip2px(context, 20);
228 282
        }
229
283
        footerViewHolder.footTextView.setLayoutParams(params);
230 284
    }
231 285
232
    private void setHeaderHolder(IViewHolder holder, int position) {
286
287
288
    private void bindHeaderViewHolder(IViewHolder holder, int position) {
233 289
        // 获取chat_header_linear_layout的布局属性,记住这里
234 290
        // 要是布局的最外层的控件的布局属性,如果是里层的会报cast错误
235 291
        SimpleHeaderViewHolder simpleHeaderViewHolder = (SimpleHeaderViewHolder) holder;
@ -258,104 +314,6 @@ public class ChatRecommendAdapter extends RecyclerView.Adapter<IViewHolder> {
258 314
        void onItemClick(View view);
259 315
    }
260 316
261
    class SimpleViewHolder extends IViewHolder {
262
        private int index;
263
        RelativeLayout card_view;
264
        TextView recycler_view_title;
265
        TextView recycler_view_zan;
266
        TextView user_avater_name;
267
        TextView is_top_view;
268
        ImageView user_avater;
269
        ImageView recycler_view_zan_icon;
270
        ImageView info_bg_icon;
271
        ImageView info_id_video_icon;
272
        RelativeLayout bottom_view;
273
        ImageView topic_back;
274
        TextView topic_title;
275
276
        public SimpleViewHolder(View view) {
277
            super(view);
278
            card_view = view.findViewById(R.id.card_view);
279
            recycler_view_title = (TextView) view.findViewById(R.id.recycler_view_title);
280
            user_avater_name = (TextView) view.findViewById(R.id.user_avater_name);
281
            is_top_view = (TextView) view.findViewById(R.id.is_top_view);
282
            recycler_view_zan = (TextView) view.findViewById(R.id.recycler_view_zan);
283
            user_avater = (ImageView) view.findViewById(R.id.user_avater);
284
            recycler_view_zan_icon = view.findViewById(R.id.recycler_view_zan_icon);
285
            info_bg_icon = (ImageView) view.findViewById(R.id.info_bg_icon);
286
            info_id_video_icon = (ImageView) view.findViewById(R.id.info_id_video_icon);
287
            bottom_view = view.findViewById(R.id.bottom_view);
288
            topic_back = view.findViewById(R.id.topic_back);
289
            topic_title = view.findViewById(R.id.topic_title);
290
291
            itemView.setOnClickListener(new View.OnClickListener() {
292
                @Override
293
                public void onClick(View view) {
294
                    if (onRecyclerItemClickListener != null) {
295
                        onRecyclerItemClickListener.onItemClickListener(getLayoutPosition(), 2);
296
                    }
297
                }
298
            });
299
            recycler_view_zan_icon.setOnClickListener(new View.OnClickListener() {
300
                @Override
301
                public void onClick(View view) { // 点赞操作
302
                    likeClick();
303
                }
304
            });
305
        }
306
307
        private void likeClick() {
308
            final ChatRecommendBean bean = chatRecommendBeans.get(index);
309
            if (bean.likeFlg == 1) { // 已点赞,无需再次点赞
310
                return;
311
            }
312
            String url = MainApplication.urlNew + "/topic/like.do";
313
            Map<String, String> map = new HashMap<>();
314
            CommonParams.addCommonParams(map);
315
            map.put("targetId", bean.targetId + "");
316
            map.put("targetType", bean.targetType + "");
317
            map.put("flag", "1");
318
            map.put("authorId", bean.addUserId + "");
319
            Log.d(TAG, "likeClick: " + map);
320
321
            OkHttpUtils.get().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
322
                @Override
323
                public void onError(Call call, Exception e) {
324
                    ToastUtil.showToast(context, "点赞失败,请重试", Toast.LENGTH_SHORT);
325
                }
326
327
                @Override
328
                public void onResponse(String response) {
329
                    String rtnCode = JsonUtils.getKeyResult(response, "code");
330
                    String desc = JsonUtils.getKeyResult(response, "desc");
331
                    if ("1000".equals(rtnCode)) {
332
                        recycler_view_zan_icon.setBackgroundResource(R.drawable.app_talk_main_list_zan_red_icon);
333
                        bean.likeNums++;
334
335
                        if (bean.likeNums > 999) {
336
                            recycler_view_zan.setText("999+");
337
                        } else {
338
                            recycler_view_zan.setText(bean.likeNums + "");
339
                        }
340
                        recycler_view_zan.setVisibility(View.VISIBLE);
341
                        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) recycler_view_zan_icon.getLayoutParams();
342
                        params.rightMargin = DensityUtil.dip2px(context, 5);
343
                        recycler_view_zan_icon.setLayoutParams(params);
344
                    } else {
345
                        ToastUtil.showToast(context, desc, Toast.LENGTH_SHORT);
346
                    }
347
                }
348
            });
349
        }
350
351
        public int getIndex() {
352
            return index;
353
        }
354
355
        public void setIndex(int index) {
356
            this.index = index;
357
        }
358
    }
359 317
360 318
    class SimpleHeaderViewHolder extends IViewHolder {
361 319
        LinearLayout chat_header_linear_layout;

+ 1 - 1
app/src/main/java/com/electric/chargingpile/adapter/LayoutAdapter.java

@ -59,7 +59,7 @@ public class LayoutAdapter extends RecyclerView.Adapter<IViewHolder> {
59 59
        talkRecommendBeans = new ArrayList<>();
60 60
        talkHeaderRecommendBeans = new ArrayList<>();
61 61
        screenWidth = ScreenUtils.getScreenWidth(context);
62
        talkItemWidth = (screenWidth - DensityUtil.dip2px(context, 10 * 2)) / 2;
62
        talkItemWidth = (screenWidth - DensityUtil.dip2px(context, 20 * 2)) / 2;
63 63
    }
64 64
65 65
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {

+ 1 - 7
app/src/main/java/com/electric/chargingpile/adapter/TopicDetailAdapter.java

@ -56,9 +56,6 @@ public class TopicDetailAdapter extends RecyclerView.Adapter<IViewHolder> {
56 56
    private RecyclerItemTypeClickListener onRecyclerItemClickListener;
57 57
    private ChooseTopicSortInterface chooseTopicSortInterface;
58 58
    private final int screenWidth;
59
    private final int screenHeight;
60
    private final int statusHeight;
61
    private final int headerHeight;
62 59
    private int itemWidth;
63 60
    private boolean showFooter = false;
64 61
@ -69,10 +66,7 @@ public class TopicDetailAdapter extends RecyclerView.Adapter<IViewHolder> {
69 66
        beanLab = TopicDetailBeanLab.get(context);
70 67
71 68
        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;
69
        itemWidth = (screenWidth - DensityUtil.dip2px(context, 20 * 2)) / 2;
76 70
    }
77 71
78 72
    @Override

+ 1 - 1
app/src/main/java/com/electric/chargingpile/adapter/UserPageAdapter.java

@ -54,7 +54,7 @@ public class UserPageAdapter extends RecyclerView.Adapter<IViewHolder> {
54 54
        beanLab = UserPageBeanLab.get(context);
55 55
56 56
        screenWidth = ScreenUtils.getScreenWidth(context);
57
        itemWidth = (screenWidth - DensityUtil.dip2px(context, 10 * 2)) / 2;
57
        itemWidth = (screenWidth - DensityUtil.dip2px(context, 20 * 2)) / 2;
58 58
    }
59 59
60 60
    @Override

+ 45 - 0
app/src/main/java/com/electric/chargingpile/data/ChatBeanLab.java

@ -0,0 +1,45 @@
1
package com.electric.chargingpile.data;
2
3
import android.content.Context;
4
5
import java.util.ArrayList;
6
import java.util.List;
7
8
public class ChatBeanLab {
9
    private static ChatBeanLab beanLab;
10
    private List<ChatRecommendBean> beans;
11
12
    public static ChatBeanLab get(Context context) {
13
        if (beanLab == null) {
14
            beanLab = new ChatBeanLab(context);
15
        }
16
17
        return beanLab;
18
    }
19
20
    private ChatBeanLab(Context context) {
21
        beans = new ArrayList<>();
22
    }
23
24
    public List<ChatRecommendBean> beans() {
25
        return beans;
26
    }
27
28
    public ChatRecommendBean bean(int topicId) {
29
        for (ChatRecommendBean bean : beans) {
30
            if (bean.topicId == topicId) {
31
                return bean;
32
            }
33
        }
34
        return null;
35
    }
36
37
    public void clear() {
38
        beans.clear();
39
    }
40
41
42
    public void add(List<ChatRecommendBean> list) {
43
        beans.addAll(list);
44
    }
45
}

+ 95 - 81
app/src/main/java/com/electric/chargingpile/fragment/ChatRecommendFragment.java

@ -21,13 +21,12 @@ import com.electric.chargingpile.activity.TopicDetailActivity;
21 21
import com.electric.chargingpile.activity.VideoDetaislActivity;
22 22
import com.electric.chargingpile.adapter.ChatRecommendAdapter;
23 23
import com.electric.chargingpile.adapter.ChatRecommendItemDecoration;
24
import com.electric.chargingpile.adapter.TopicDetailAdapter;
24 25
import com.electric.chargingpile.application.MainApplication;
25
import com.electric.chargingpile.data.AuthSignBean;
26
import com.electric.chargingpile.data.ChatBeanLab;
26 27
import com.electric.chargingpile.data.ChatRecommendBean;
27
import com.electric.chargingpile.data.TalkRecommendBean;
28 28
import com.electric.chargingpile.iview.RecyclerItemTypeClickListener;
29 29
import com.electric.chargingpile.manager.ProfileManager;
30
import com.electric.chargingpile.util.Bimp;
31 30
import com.electric.chargingpile.util.CommonParams;
32 31
import com.electric.chargingpile.util.JsonUtils;
33 32
import com.electric.chargingpile.util.LoadingDialog;
@ -36,27 +35,18 @@ import com.electric.chargingpile.util.ToastUtil;
36 35
import com.zhy.http.okhttp.OkHttpUtils;
37 36
import com.zhy.http.okhttp.callback.StringCallback;
38 37
39
import java.io.Serializable;
40 38
import java.util.ArrayList;
41 39
import java.util.HashMap;
42
import java.util.List;
43 40
import java.util.Map;
44
45
import io.reactivex.Observable;
46
import io.reactivex.android.schedulers.AndroidSchedulers;
47
import io.reactivex.disposables.Disposable;
48
import io.reactivex.functions.Consumer;
49
import io.reactivex.functions.Predicate;
50
import io.reactivex.schedulers.Schedulers;
51 41
import okhttp3.Call;
52 42
53 43
public class ChatRecommendFragment extends Fragment implements View.OnClickListener {
54 44
    private static final String TAG = "ChatRecommendFragment";
55 45
    public static final int CLICK_PUBLISH_BTN = 1010;
56 46
    private View view;
57
    private XRefreshView refreshView;
58
    private ImageView iv_ask;
47
    private XRefreshView xRefreshView;
59 48
    private RecyclerView recyclerView;
49
    private ImageView iv_ask;
60 50
    private ChatRecommendAdapter chatRecommendAdapter;
61 51
    private StaggeredGridLayoutManager layoutManager;
62 52
    private ImageView chat_share_info_remind;
@ -75,8 +65,8 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
75 65
    private void initViews() {
76 66
        loadingDialog = new LoadingDialog(getContext());
77 67
        loadingDialog.setCanceledOnTouchOutside(false);
78
        refreshView = view.findViewById(R.id.chat_x_refresh_view);
79
        refreshView.setPullLoadEnable(true);
68
        xRefreshView = view.findViewById(R.id.chat_x_refresh_view);
69
        xRefreshView.setPullLoadEnable(true);
80 70
        recyclerView = view.findViewById(R.id.recycler_view_test_rv);
81 71
        recyclerView.setHasFixedSize(true);
82 72
@ -96,13 +86,11 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
96 86
        layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
97 87
        recyclerView.setItemAnimator(null);
98 88
        recyclerView.setLayoutManager(layoutManager);
99
        recyclerView.addItemDecoration(new ChatRecommendItemDecoration()); // 设置边距
100
        // 静默加载模式不能设置footerview
89
        recyclerView.addItemDecoration(new TopicDetailAdapter.ContentViewDecoration()); // 设置边距
101 90
        recyclerView.setAdapter(chatRecommendAdapter);
102
        refreshView.setPinnedTime(0);
103
//        refreshView.setMoveForHorizontal(true);
91
        xRefreshView.setPinnedTime(0);
104 92
105
        refreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {
93
        xRefreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {
106 94
            @Override
107 95
            public void onRefresh(boolean isPullDown) {
108 96
                page = 1;
@ -116,9 +104,9 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
116 104
            }
117 105
        });
118 106
119
        refreshView.startRefresh();
107
        loadingDialog.show();
108
//        xRefreshView.startRefresh();
120 109
        requestHeaderData(); // 该页面数据发起请求起点
121
122 110
        chatRecommendAdapter.setOnRecyclerItemClickListener(new RecyclerItemTypeClickListener() {
123 111
            @Override
124 112
            public void onItemClickListener(final int position, int type) {
@ -128,48 +116,50 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
128 116
                }
129 117
130 118
                if (type == 2) {
131
                }
132
                final ArrayList<ChatRecommendBean> beans = chatRecommendAdapter.getCurrentData();
133
                ChatRecommendBean bean = beans.get(position - 1);
134
                if (bean.targetType == ChatRecommendBean.TARGET_TYPE_IMAGE_TOPIC) {
135
                    Intent intent = new Intent(getActivity(), TopicDetailActivity.class);
136
                    intent.putExtra("topicId", bean.targetId);
137
                    startActivity(intent);
138
                } else {
139
                    Disposable disposable = Observable
140
                            .fromIterable(beans)
141
                            .filter(new Predicate<ChatRecommendBean>() {
142
                                @Override
143
                                public boolean test(ChatRecommendBean chatRecommendBean) throws Exception {
144
                                    return chatRecommendBean.targetType != 25;
145
                                }
146
                            }).toList()
147
                            .subscribeOn(Schedulers.io())
148
                            .observeOn(AndroidSchedulers.mainThread())
149
                            .subscribe(new Consumer<List<ChatRecommendBean>>() {
150
                                @Override
151
                                public void accept(List<ChatRecommendBean> list) throws Exception {
152
                                    ChatRecommendBean chatRecommendBean = beans.get(position - 1);
153
154
                                    int index = 0;
155
                                    for (int i = 0; i < list.size(); i++) {
156
                                        ChatRecommendBean tmp = list.get(i);
157
                                        if (tmp.targetType == chatRecommendBean.targetType &&
158
                                                tmp.targetId == chatRecommendBean.targetId) {
159
                                            index = i;
160
                                            break;
161
                                        }
162
                                    }
163
164
                                    Intent intent = new Intent(getActivity(), VideoDetaislActivity.class);
165
                                    intent.putExtra("list", (Serializable) list);
166
                                    intent.putExtra("pos", index);
167
                                    startActivity(intent);
168
169
                                }
170
                            });
119
171 120
                }
172 121
122
//                final ArrayList<ChatRecommendBean> beans = chatRecommendAdapter.getCurrentData();
123
//                ChatRecommendBean bean = beans.get(position - 1);
124
//                if (bean.targetType == ChatRecommendBean.TARGET_TYPE_IMAGE_TOPIC) {
125
//                    Intent intent = new Intent(getActivity(), TopicDetailActivity.class);
126
//                    intent.putExtra("topicId", bean.targetId);
127
//                    startActivity(intent);
128
//                } else {
129
//                    Disposable disposable = Observable
130
//                            .fromIterable(beans)
131
//                            .filter(new Predicate<ChatRecommendBean>() {
132
//                                @Override
133
//                                public boolean test(ChatRecommendBean chatRecommendBean) throws Exception {
134
//                                    return chatRecommendBean.targetType != 25;
135
//                                }
136
//                            }).toList()
137
//                            .subscribeOn(Schedulers.io())
138
//                            .observeOn(AndroidSchedulers.mainThread())
139
//                            .subscribe(new Consumer<List<ChatRecommendBean>>() {
140
//                                @Override
141
//                                public void accept(List<ChatRecommendBean> list) throws Exception {
142
//                                    ChatRecommendBean chatRecommendBean = beans.get(position - 1);
143
//
144
//                                    int index = 0;
145
//                                    for (int i = 0; i < list.size(); i++) {
146
//                                        ChatRecommendBean tmp = list.get(i);
147
//                                        if (tmp.targetType == chatRecommendBean.targetType &&
148
//                                                tmp.targetId == chatRecommendBean.targetId) {
149
//                                            index = i;
150
//                                            break;
151
//                                        }
152
//                                    }
153
//
154
//                                    Intent intent = new Intent(getActivity(), VideoDetaislActivity.class);
155
//                                    intent.putExtra("list", (Serializable) list);
156
//                                    intent.putExtra("pos", index);
157
//                                    startActivity(intent);
158
//
159
//                                }
160
//                            });
161
//                }
162
173 163
                // TODO update by huyuguo
174 164
                Log.d(TAG, "onItemClickListener: position:" + position + ",type:" + type);
175 165
@ -253,11 +243,12 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
253 243
    }
254 244
255 245
    public void refreshList() {
256
        if (view == null)
257
            return;
258
        refreshView.startRefresh();
259
        page = 1;
260
        requestHeaderData();
246
//        if (view == null)
247
//            return;
248
//        ChatBeanLab.get(getContext()).clear();
249
//        xRefreshView.startRefresh();
250
//        page = 1;
251
//        requestHeaderData();
261 252
    }
262 253
263 254
    private void requestHeaderData() {
@ -270,10 +261,11 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
270 261
        OkHttpUtils.get().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
271 262
            @Override
272 263
            public void onError(Call call, Exception e) {
264
                loadingDialog.dismiss();
273 265
                if (page == 1) {
274
                    refreshView.stopRefresh();
266
                    xRefreshView.stopRefresh();
275 267
                } else {
276
                    refreshView.stopLoadMore();
268
                    xRefreshView.stopLoadMore();
277 269
                }
278 270
                if (getActivity() != null) {
279 271
                    ToastUtil.showToast(getActivity().getApplicationContext(), "加载失败,请重试:" + e.getMessage(), Toast.LENGTH_SHORT);
@ -290,6 +282,7 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
290 282
                    chatRecommendAdapter.setHeaderData(topicData);
291 283
                    requestData();
292 284
                } else {
285
                    loadingDialog.dismiss();
293 286
                    ToastUtil.showToast(getActivity().getApplicationContext(), desc, Toast.LENGTH_SHORT);
294 287
                }
295 288
            }
@ -306,22 +299,23 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
306 299
        OkHttpUtils.get().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
307 300
            @Override
308 301
            public void onError(Call call, Exception e) {
302
                loadingDialog.dismiss();
309 303
                if (page == 1) {
310
                    refreshView.stopRefresh();
304
                    xRefreshView.stopRefresh();
311 305
                } else {
312
                    refreshView.stopLoadMore();
306
                    xRefreshView.stopLoadMore();
313 307
                }
314 308
                ToastUtil.showToast(getActivity().getApplicationContext(), "加载失败,请重试:" + e.getMessage(), Toast.LENGTH_SHORT);
315 309
            }
316 310
317 311
            @Override
318 312
            public void onResponse(String response) {
313
                loadingDialog.dismiss();
319 314
                if (page == 1) {
320
                    refreshView.stopRefresh();
315
                    xRefreshView.stopRefresh();
321 316
                } else {
322
                    refreshView.stopLoadMore();
317
                    xRefreshView.stopLoadMore();
323 318
                }
324
//                Log.d(TAG, "onResponse: " + response);
325 319
326 320
                String code = JsonUtils.getKeyResult(response, "code");
327 321
                String desc = JsonUtils.getKeyResult(response, "desc");
@ -329,19 +323,39 @@ public class ChatRecommendFragment extends Fragment implements View.OnClickListe
329 323
                    String data = JsonUtils.getKeyResult(response, "data");
330 324
                    ArrayList<ChatRecommendBean> chatRecommendBeans = (ArrayList<ChatRecommendBean>) JsonUtils.parseToObjectList(data, ChatRecommendBean.class);
331 325
                    if (page == 1) {
332
                        refreshView.setLoadComplete(false);
326
                        xRefreshView.setLoadComplete(false);
333 327
                        chatRecommendAdapter.setData(chatRecommendBeans);
328
                        if (chatRecommendBeans.size() == 0) {
329
                            xRefreshView.setLoadComplete(true);
330
                            chatRecommendAdapter.setFooterData(true);
331
                        } else {
332
                            chatRecommendAdapter.setFooterData(false);
333
                        }
334 334
                    } else {
335
                        chatRecommendAdapter.addData(chatRecommendBeans);
336
                    }
337
338
                    if (chatRecommendBeans.size() == 0) {
339
                        refreshView.setLoadComplete(true);
335
                        if (chatRecommendBeans.size() == 0) {
336
                            xRefreshView.setLoadComplete(true);
337
                            chatRecommendAdapter.setFooterData(true);
338
                        } else {
339
                            chatRecommendAdapter.setFooterData(false);
340
                            chatRecommendAdapter.addData(chatRecommendBeans);
341
                        }
340 342
                    }
341 343
                } else {
344
                    if (page == 1) {
345
                        xRefreshView.stopRefresh();
346
                    } else {
347
                        page--;
348
                        xRefreshView.stopLoadMore();
349
                    }
342 350
                    ToastUtil.showToast(getActivity().getApplicationContext(), desc, Toast.LENGTH_SHORT);
343 351
                }
344 352
            }
345 353
        });
346 354
    }
355
356
    @Override
357
    public void onPause() {
358
        super.onPause();
359
        ChatBeanLab.get(getContext()).clear();
360
    }
347 361
}

+ 4 - 3
app/src/main/res/layout/activity_chat_content.xml

@ -60,11 +60,11 @@
60 60
            android:id="@+id/title"
61 61
            android:layout_width="0dp"
62 62
            android:layout_height="wrap_content"
63
            android:paddingLeft="10dp"
64
            android:paddingRight="10dp"
65
            android:paddingTop="10dp"
66 63
            android:ellipsize="end"
67 64
            android:maxLines="3"
65
            android:paddingLeft="10dp"
66
            android:paddingTop="10dp"
67
            android:paddingRight="10dp"
68 68
            android:textColor="#222222"
69 69
            android:textSize="15sp"
70 70
            app:layout_constraintEnd_toEndOf="parent"
@ -182,6 +182,7 @@
182 182
            android:layout_width="0dp"
183 183
            android:layout_height="wrap_content"
184 184
            android:ellipsize="end"
185
            android:gravity="center"
185 186
            android:maxLines="3"
186 187
            android:paddingLeft="10dp"
187 188
            android:paddingRight="10dp"

+ 0 - 136
app/src/main/res/layout/view_chat_recommend.xml

@ -1,136 +0,0 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
4
    android:id="@+id/card_view"
5
    android:layout_width="match_parent"
6
    android:layout_height="wrap_content"
7
    android:layout_marginBottom="10dp"
8
    android:background="#ffffff"
9
    android:paddingBottom="5dp">
10
11
    <RelativeLayout
12
        android:id="@+id/info_bg_icon_bg"
13
        android:layout_width="wrap_content"
14
        android:layout_height="wrap_content"
15
        android:gravity="center">
16
17
        <ImageView
18
            android:id="@+id/info_bg_icon"
19
            android:layout_width="wrap_content"
20
            android:layout_height="wrap_content"
21
            android:scaleType="fitXY" />
22
23
        <ImageView
24
            android:id="@+id/info_id_video_icon"
25
            android:layout_width="wrap_content"
26
            android:layout_height="wrap_content"
27
            android:layout_centerInParent="true"
28
            android:src="@drawable/app_talk_video_icon" />
29
30
        <ImageView
31
            android:id="@+id/topic_back"
32
            android:layout_width="match_parent"
33
            android:layout_height="match_parent"
34
            android:alpha="0.5"
35
            android:background="@color/black" />
36
37
        <TextView
38
            android:id="@+id/topic_title"
39
            android:layout_width="wrap_content"
40
            android:layout_height="wrap_content"
41
            android:layout_centerInParent="true"
42
            android:textColor="@color/white"
43
            android:textSize="14sp" />
44
    </RelativeLayout>
45
46
    <TextView
47
        android:id="@+id/is_top_view"
48
        android:layout_width="wrap_content"
49
        android:layout_height="wrap_content"
50
        android:layout_alignRight="@+id/info_bg_icon_bg"
51
        android:layout_marginTop="10dp"
52
        android:layout_marginRight="10dp"
53
        android:background="@color/white"
54
        android:text="置顶"
55
        android:textColor="@color/color_fb9349"
56
        android:textSize="14sp" />
57
58
    <TextView
59
        android:id="@+id/recycler_view_title"
60
        android:layout_width="wrap_content"
61
        android:layout_height="wrap_content"
62
        android:layout_below="@+id/info_bg_icon_bg"
63
        android:layout_alignLeft="@+id/info_bg_icon_bg"
64
        android:layout_alignRight="@+id/info_bg_icon_bg"
65
        android:layout_marginBottom="16dp"
66
        android:ellipsize="end"
67
        android:maxLines="3"
68
        android:paddingLeft="10dp"
69
        android:paddingTop="11dp"
70
        android:paddingRight="10dp"
71
        android:text="123"
72
        android:textColor="@color/ui_62"
73
        android:textSize="15sp" />
74
75
    <RelativeLayout
76
        android:id="@+id/bottom_view"
77
        android:layout_width="wrap_content"
78
        android:layout_height="wrap_content"
79
        android:layout_below="@+id/recycler_view_title"
80
        android:layout_alignLeft="@+id/info_bg_icon_bg"
81
        android:layout_alignRight="@+id/info_bg_icon_bg">
82
83
        <LinearLayout
84
            android:id="@+id/recycler_view_zan_icon_view"
85
            android:layout_width="wrap_content"
86
            android:layout_height="wrap_content"
87
            android:layout_alignParentRight="true"
88
            android:layout_centerVertical="true"
89
            android:gravity="center_vertical"
90
            android:orientation="horizontal">
91
92
            <ImageView
93
                android:id="@+id/recycler_view_zan_icon"
94
                android:layout_width="16dp"
95
                android:layout_height="16dp"
96
                android:layout_centerVertical="true"
97
                android:layout_marginRight="5dp"
98
                android:layout_toLeftOf="@+id/recycler_view_zan"
99
                android:background="@drawable/app_talk_main_list_zan_icon" />
100
101
            <TextView
102
                android:id="@+id/recycler_view_zan"
103
                android:layout_width="wrap_content"
104
                android:layout_height="wrap_content"
105
                android:layout_centerVertical="true"
106
                android:layout_marginRight="10dp"
107
                android:text="456"
108
                android:textColor="@color/ui_68"
109
                android:textSize="13sp" />
110
111
        </LinearLayout>
112
113
        <ImageView
114
            android:id="@+id/user_avater"
115
            android:layout_width="20dp"
116
            android:layout_height="20dp"
117
            android:layout_centerVertical="true"
118
            android:layout_marginLeft="10dp" />
119
120
        <TextView
121
            android:id="@+id/user_avater_name"
122
            android:layout_width="match_parent"
123
            android:layout_height="wrap_content"
124
            android:layout_centerVertical="true"
125
            android:layout_toLeftOf="@+id/recycler_view_zan_icon_view"
126
            android:layout_toRightOf="@+id/user_avater"
127
            android:ellipsize="end"
128
            android:paddingLeft="5dp"
129
            android:singleLine="true"
130
            android:text="456"
131
            android:textColor="@color/ui_68"
132
            android:textSize="13sp" />
133
134
    </RelativeLayout>
135
136
</RelativeLayout>