Skip to content

Commit e558802

Browse files
committed
Client:动态的点赞用户列表新增点击名称跳转至用户详情界面
1 parent 39224d4 commit e558802

4 files changed

Lines changed: 159 additions & 35 deletions

File tree

APIJSON(Android)/APIJSON(ADT)/APIJSONApp/APIJSONApp/res/layout/moment_view.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@
109109
android:id="@+id/llMomentViewPraise"
110110
style="@style/ll_horizontal_match_wrap"
111111
android:layout_height="wrap_content"
112-
android:layout_marginTop="4dp"
113112
android:layout_marginBottom="4dp"
113+
android:layout_marginTop="4dp"
114114
android:background="@drawable/bg_item_to_alpha"
115115
android:gravity="top" >
116116

@@ -120,10 +120,12 @@
120120
android:scaleType="fitXY"
121121
android:src="@drawable/praise" />
122122

123-
<TextView
123+
<apijson.demo.client.view.PraiseTextView
124124
android:id="@+id/tvMomentViewPraise"
125125
style="@style/text_small_blue"
126+
android:background="@drawable/bg_item_to_alpha"
126127
android:gravity="left|top"
128+
android:lineSpacingExtra="4dp"
127129
android:text="等17人觉得很赞" />
128130
</LinearLayout>
129131

APIJSON(Android)/APIJSON(ADT)/APIJSONApp/APIJSONApp/src/apijson/demo/client/view/CommentTextView.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
public class CommentTextView extends TextView {
3737

3838
public interface OnNameClickListener {
39-
void onNameClick(int index, View widget);
39+
void onNameClick(int index, View widget, User user);
4040
}
4141
private OnNameClickListener listener;
4242
public void setOnNameClickListener(OnNameClickListener l) {
@@ -84,31 +84,30 @@ public void setView(CommentItem item) {
8484
msp = new SpannableString(userName + " : " + content);
8585
} else {
8686
msp = new SpannableString(userName + " 回复 " + toUserName + " : " + content);
87-
setSpan(msp, 1, userNameLength + 4, userNameLength + 4 + toUserName.length());
87+
setSpan(msp, 1, userNameLength + 4, userNameLength + 4 + toUserName.length(), toUser);
8888
}
89-
setSpan(msp, 0, 0, userNameLength);
89+
setSpan(msp, 0, 0, userNameLength, user);
9090

9191
setText(msp);
9292
setMovementMethod(LinkMovementMethod.getInstance());
9393
}
9494

95-
private void setSpan(SpannableString msp, final int index, int start, int end) {
95+
private void setSpan(SpannableString msp, final int index, int start, int end, final User user) {
9696
msp.setSpan(new ClickableSpan() {
9797

9898
@Override
9999
public void onClick(View widget) {
100-
onNameClick(index, widget);
100+
onNameClick(index, widget, user);
101101
}
102102
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
103103
}
104104

105105

106-
public void onNameClick(int index, View widget) {
106+
public void onNameClick(int index, View widget, User user) {
107107
if (listener != null) {
108-
listener.onNameClick(index, widget);
108+
listener.onNameClick(index, widget, user);
109109
} else {
110-
CommonUtil.toActivity((Activity) getContext(), UserActivity.createIntent(getContext()
111-
, index == 0 ? user.getId() : toUser.getId()));
110+
CommonUtil.toActivity((Activity) getContext(), UserActivity.createIntent(getContext(), user.getId()));
112111
}
113112
}
114113

APIJSON(Android)/APIJSON(ADT)/APIJSONApp/APIJSONApp/src/apijson/demo/client/view/MomentView.java

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import apijson.demo.client.activity_fragment.MomentActivity;
4949
import apijson.demo.client.activity_fragment.UserActivity;
5050
import apijson.demo.client.activity_fragment.UserListActivity;
51-
import apijson.demo.client.activity_fragment.UserListFragment;
5251
import apijson.demo.client.adapter.CommentAdapter.ItemView.OnCommentClickListener;
5352
import apijson.demo.client.application.APIJSONApplication;
5453
import apijson.demo.client.model.CommentItem;
@@ -108,10 +107,10 @@ public MomentView(Activity context, Resources resources) {
108107
public ImageView ivMomentViewComment;
109108

110109
public ViewGroup llMomentViewPraise;
111-
public TextView tvMomentViewPraise;
112-
110+
public PraiseTextView tvMomentViewPraise;
111+
113112
public View vMomentViewDivider;
114-
113+
115114
public ViewGroup llMomentViewCommentContainer;
116115
@SuppressLint("InflateParams")
117116
@Override
@@ -135,10 +134,10 @@ public View createView(LayoutInflater inflater) {
135134
ivMomentViewComment = findViewById(R.id.ivMomentViewComment, this);
136135

137136
llMomentViewPraise = findViewById(R.id.llMomentViewPraise, this);
138-
tvMomentViewPraise = findViewById(R.id.tvMomentViewPraise);
139-
137+
tvMomentViewPraise = findViewById(R.id.tvMomentViewPraise, this);
138+
140139
vMomentViewDivider = findViewById(R.id.vMomentViewDivider);
141-
140+
142141
llMomentViewCommentContainer = findViewById(R.id.llMomentViewCommentContainer);
143142

144143
return convertView;
@@ -186,7 +185,7 @@ public void bindView(MomentItem data_){
186185

187186
vMomentViewDivider.setVisibility(llMomentViewPraise.getVisibility() == View.VISIBLE
188187
&& llMomentViewCommentContainer.getVisibility() == View.VISIBLE ? View.VISIBLE : View.GONE);
189-
188+
190189
}
191190

192191

@@ -195,24 +194,19 @@ public void bindView(MomentItem data_){
195194
* @param list
196195
*/
197196
private void setPraise(boolean joined, List<Long> list) {
198-
int count = list == null ? 0 : list.size();
199-
String[] names = null;
200-
if (count > 0) {
201-
if (count > 9) {
202-
list = list.subList(0, 9);
203-
}
204-
names = new String[list.size()];
205-
for (int i = 0; i < list.size(); i++) {
206-
names[i] = "" + list.get(i);
207-
}
208-
}
209-
210197
ivMomentViewPraise.setImageResource(joined ? R.drawable.praised : R.drawable.praise);
211198

212-
llMomentViewPraise.setVisibility(count <= 0 ? View.GONE : View.VISIBLE);
213-
tvMomentViewPraise.setText(count <= 0 ? ""
214-
: zuo.biao.apijson.StringUtil.getString(names, "、")
215-
+ (count <= 9 ? "" : "等" + count + "人觉得很赞"));
199+
llMomentViewPraise.setVisibility(list == null || list.isEmpty() ? View.GONE : View.VISIBLE);
200+
if (list != null) {
201+
List<User> userList = new ArrayList<User>();
202+
User u;
203+
for (Long id : list) {
204+
u = new User(id);
205+
u.setName("" + id);
206+
userList.add(u);
207+
}
208+
tvMomentViewPraise.setView(userList);
209+
}
216210
}
217211

218212
private boolean showComment = true;
@@ -453,6 +447,7 @@ public void onClick(View v) {
453447
case R.id.tvCommentContainerViewMore:
454448
toComment(false);
455449
break;
450+
case R.id.tvMomentViewPraise:
456451
case R.id.llMomentViewPraise:
457452
toActivity(UserListActivity.createIntent(context, data.getPraiseUserIdList())
458453
.putExtra(UserListActivity.INTENT_TITLE, data.getPraiseCount() + "人觉得很赞"));
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
/*Copyright ©2016 TommyLemon(https://github.com/TommyLemon)
2+
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing, software
10+
distributed under the License is distributed on an "AS IS" BASIS,
11+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
See the License for the specific language governing permissions and
13+
limitations under the License.*/
14+
15+
package apijson.demo.client.view;
16+
17+
import java.util.ArrayList;
18+
import java.util.List;
19+
20+
import zuo.biao.library.util.CommonUtil;
21+
import zuo.biao.library.util.StringUtil;
22+
import android.app.Activity;
23+
import android.content.Context;
24+
import android.text.SpannableString;
25+
import android.text.Spanned;
26+
import android.text.TextPaint;
27+
import android.text.method.LinkMovementMethod;
28+
import android.util.AttributeSet;
29+
import android.view.View;
30+
import android.widget.TextView;
31+
import apijson.demo.client.R;
32+
import apijson.demo.client.activity_fragment.UserActivity;
33+
import apijson.demo.client.model.User;
34+
import apijson.demo.client.view.CommentTextView.OnNameClickListener;
35+
36+
/**评论TextView
37+
*/
38+
public class PraiseTextView extends TextView {
39+
40+
private OnNameClickListener listener;
41+
public void setOnNameClickListener(OnNameClickListener l) {
42+
this.listener = l;
43+
}
44+
45+
46+
public PraiseTextView(Context context) {
47+
super(context);
48+
}
49+
50+
public PraiseTextView(Context context, AttributeSet attrs) {
51+
super(context, attrs);
52+
}
53+
54+
public PraiseTextView(Context context, AttributeSet attrs, int defStyle) {
55+
super(context, attrs, defStyle);
56+
}
57+
58+
public static final int DIVIDER_LENGTH = "、".length();
59+
/**设置View
60+
* @param comment
61+
*/
62+
public void setView(List<User> list) {
63+
if (list == null || list.isEmpty()) {
64+
setText("");
65+
return;
66+
}
67+
//去除无效User
68+
User[] users = list.toArray(new User[]{});
69+
for (int i = 0; i < users.length; i++) {
70+
if (users[i] == null || StringUtil.isNotEmpty(users[i].getName(), true) == false) {
71+
list.remove(i);
72+
}
73+
}
74+
int count = list == null ? 0 : list.size();
75+
if (count > 9) {
76+
list = list.subList(0, 9);
77+
}
78+
79+
80+
//拼接字符串
81+
List<Integer> dividerIndexes = new ArrayList<Integer>();
82+
String content = "";
83+
User user;
84+
for (int i = 0; i < list.size(); i++) {
85+
user = list.get(i);
86+
dividerIndexes.add(content.length());
87+
content += (i <= 0 ? "" : "、") + user.getName();
88+
}
89+
dividerIndexes.add(content.length());//最后一个
90+
91+
SpannableString msp = new SpannableString(content + (count <= 9 ? "" : " 等" + count + "人觉得很赞"));
92+
93+
//设置可点击名称
94+
for (int i = 0; i < dividerIndexes.size() - 1; i++) {
95+
setSpan(msp, i, dividerIndexes.get(i) + (i <= 0 ? 0 : DIVIDER_LENGTH), dividerIndexes.get(i + 1), list.get(i));
96+
}
97+
98+
setText(msp);
99+
setMovementMethod(LinkMovementMethod.getInstance());
100+
}
101+
102+
private void setSpan(SpannableString msp, final int index, int start, int end, final User user) {
103+
msp.setSpan(new ClickableSpan() {
104+
105+
@Override
106+
public void onClick(View widget) {
107+
onNameClick(index, widget, user);
108+
}
109+
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
110+
}
111+
112+
113+
public void onNameClick(int index, View widget, User user) {
114+
if (listener != null) {
115+
listener.onNameClick(index, widget, user);
116+
} else {
117+
CommonUtil.toActivity((Activity) getContext(), UserActivity.createIntent(getContext(), user.getId()));
118+
}
119+
}
120+
121+
public abstract class ClickableSpan extends android.text.style.ClickableSpan {
122+
@Override
123+
public void updateDrawState(TextPaint ds) {
124+
ds.setColor(getResources().getColor(R.color.blue)); // 设置超链接颜色
125+
ds.setUnderlineText(false); // 超链接下划线
126+
}
127+
}
128+
}

0 commit comments

Comments
 (0)