Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds-android
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
云深项目组
beyond-clouds-android
Commits
1e01f6c6
Commit
1e01f6c6
authored
Mar 16, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
话题解析升级
parent
521f8863
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
30 deletions
+39
-30
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/DynamicListRecyclerViewAdapter.java
+37
-17
app/src/main/res/layout/post_item.xml
+2
-13
No files found.
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/DynamicListRecyclerViewAdapter.java
View file @
1e01f6c6
...
@@ -26,25 +26,38 @@ import cn.yunliyunwai.beyondclouds.data.model.Post;
...
@@ -26,25 +26,38 @@ import cn.yunliyunwai.beyondclouds.data.model.Post;
import
cn.yunliyunwai.beyondclouds.databinding.PostItemBinding
;
import
cn.yunliyunwai.beyondclouds.databinding.PostItemBinding
;
import
cn.yunliyunwai.beyondclouds.util.DateUtils
;
import
cn.yunliyunwai.beyondclouds.util.DateUtils
;
import
cn.yunliyunwai.beyondclouds.util.GlideRoundTransform
;
import
cn.yunliyunwai.beyondclouds.util.GlideRoundTransform
;
import
lombok.Data
;
public
class
DynamicListRecyclerViewAdapter
extends
BaseQuickAdapter
<
Post
,
BaseViewHolder
>
{
public
class
DynamicListRecyclerViewAdapter
extends
BaseQuickAdapter
<
Post
,
BaseViewHolder
>
{
static
class
TopicLink
{
@Data
private
TopicLink
(
String
topic
,
int
start
,
int
end
)
{
static
class
PostLink
{
this
.
topic
=
topic
;
enum
LinkType
{
this
.
start
=
start
;
TOPIC
,
this
.
end
=
end
;
OTHER
}
}
private
int
start
;
private
int
start
;
private
int
end
;
private
int
end
;
private
String
topic
;
private
String
content
;
private
String
link
;
private
LinkType
linkType
;
public
PostLink
(
int
start
,
int
end
,
String
content
,
String
link
,
LinkType
linkType
)
{
this
.
start
=
start
;
this
.
end
=
end
;
this
.
content
=
content
;
this
.
link
=
link
;
this
.
linkType
=
linkType
;
}
public
static
TopicLink
of
(
String
topic
,
int
start
,
int
end
)
{
public
static
PostLink
of
(
int
start
,
int
end
,
String
content
,
String
link
,
LinkType
linkType
)
{
return
new
TopicLink
(
topic
,
start
,
end
);
return
new
PostLink
(
start
,
end
,
content
,
link
,
linkType
);
}
}
}
}
private
static
final
Pattern
TOPIC_LINK_PATTERN
=
Pattern
.
compile
(
"<a href=.+>(#.+#)</a>"
);
private
static
final
Pattern
TOPIC_LINK_PATTERN
=
Pattern
.
compile
(
"<a.+?href=['\"](.+?)['\"]>(.+?)</a>"
);
private
static
final
String
TOPIC_BARRIER
=
"#"
;
private
static
final
GlideRoundTransform
glideRoundTransform
=
new
GlideRoundTransform
(
3
);
private
static
final
GlideRoundTransform
glideRoundTransform
=
new
GlideRoundTransform
(
3
);
public
DynamicListRecyclerViewAdapter
(
int
layoutResId
)
{
public
DynamicListRecyclerViewAdapter
(
int
layoutResId
)
{
...
@@ -64,7 +77,7 @@ public class DynamicListRecyclerViewAdapter extends BaseQuickAdapter<Post,BaseVi
...
@@ -64,7 +77,7 @@ public class DynamicListRecyclerViewAdapter extends BaseQuickAdapter<Post,BaseVi
static
class
TopicLinkClickable
extends
ClickableSpan
{
static
class
TopicLinkClickable
extends
ClickableSpan
{
@Override
@Override
public
void
onClick
(
@NonNull
View
widget
)
{
public
void
onClick
(
@NonNull
View
widget
)
{
Toast
.
makeText
(
widget
.
getContext
(),
"点击了
话题
"
,
Toast
.
LENGTH_SHORT
).
show
();
Toast
.
makeText
(
widget
.
getContext
(),
"点击了
链接
"
,
Toast
.
LENGTH_SHORT
).
show
();
}
}
@Override
@Override
...
@@ -75,26 +88,33 @@ public class DynamicListRecyclerViewAdapter extends BaseQuickAdapter<Post,BaseVi
...
@@ -75,26 +88,33 @@ public class DynamicListRecyclerViewAdapter extends BaseQuickAdapter<Post,BaseVi
}
}
private
void
parseAndSetContent
(
TextView
textView
,
String
content
)
{
private
void
parseAndSetContent
(
TextView
textView
,
String
content
)
{
content
=
content
.
replace
(
"<br>"
,
"\n"
);
content
=
content
.
replace
(
"<br/>"
,
"\n"
);
SpannableStringBuilder
builder
=
new
SpannableStringBuilder
();
SpannableStringBuilder
builder
=
new
SpannableStringBuilder
();
List
<
TopicLink
>
topic
LinkList
=
new
ArrayList
<>(
10
);
List
<
PostLink
>
post
LinkList
=
new
ArrayList
<>(
10
);
Matcher
matcher
=
TOPIC_LINK_PATTERN
.
matcher
(
content
);
Matcher
matcher
=
TOPIC_LINK_PATTERN
.
matcher
(
content
);
while
(
matcher
.
find
())
{
while
(
matcher
.
find
())
{
String
topic
=
matcher
.
group
(
1
);
String
link
=
matcher
.
group
(
1
);
topicLinkList
.
add
(
TopicLink
.
of
(
topic
,
matcher
.
start
(),
matcher
.
end
()));
String
linkContent
=
matcher
.
group
(
2
);
PostLink
.
LinkType
linkType
=
(
linkContent
.
startsWith
(
TOPIC_BARRIER
)
&&
linkContent
.
endsWith
(
TOPIC_BARRIER
))
?
PostLink
.
LinkType
.
TOPIC
:
PostLink
.
LinkType
.
OTHER
;
postLinkList
.
add
(
PostLink
.
of
(
matcher
.
start
(),
matcher
.
end
(),
linkContent
,
link
,
linkType
));
}
}
int
currentIndex
=
0
;
int
currentIndex
=
0
;
for
(
TopicLink
topicLink:
topic
LinkList
)
{
for
(
PostLink
postLink
:
post
LinkList
)
{
String
plainText
=
content
.
substring
(
currentIndex
,
topic
Link
.
start
);
String
plainText
=
content
.
substring
(
currentIndex
,
post
Link
.
start
);
if
(!
TextUtils
.
isEmpty
(
plainText
))
{
if
(!
TextUtils
.
isEmpty
(
plainText
))
{
builder
.
append
(
plainText
);
builder
.
append
(
plainText
);
}
}
SpannableString
topicSpannable
=
new
SpannableString
(
topicLink
.
topic
);
SpannableString
topicSpannable
=
new
SpannableString
(
postLink
.
content
);
topicSpannable
.
setSpan
(
new
TopicLinkClickable
(),
0
,
topicSpannable
.
length
(),
Spannable
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
topicSpannable
.
setSpan
(
new
TopicLinkClickable
(),
0
,
topicSpannable
.
length
(),
Spannable
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
builder
.
append
(
topicSpannable
);
builder
.
append
(
topicSpannable
);
currentIndex
=
topic
Link
.
end
;
currentIndex
=
post
Link
.
end
;
}
}
if
(
currentIndex
!=
content
.
length
())
{
if
(
currentIndex
!=
content
.
length
())
{
builder
.
append
(
content
.
substring
(
currentIndex
));
builder
.
append
(
content
.
substring
(
currentIndex
));
...
...
app/src/main/res/layout/post_item.xml
View file @
1e01f6c6
...
@@ -42,25 +42,14 @@
...
@@ -42,25 +42,14 @@
android:textColor=
"@color/colorTextAccent"
android:textColor=
"@color/colorTextAccent"
app:layout_constraintTop_toBottomOf=
"@id/barrier_user_info"
app:layout_constraintTop_toBottomOf=
"@id/barrier_user_info"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toStartOf=
"@id/blog_cover"
/>
/>
<ImageView
android:layout_marginTop=
"10dp"
android:id=
"@+id/blog_cover"
app:layout_constraintTop_toBottomOf=
"@id/barrier_user_info"
app:layout_constraintEnd_toEndOf=
"parent"
android:layout_width=
"82dp"
android:layout_height=
"55dp"
android:maxWidth=
"82dp"
android:maxHeight=
"55dp"
android:src=
"@drawable/pic1"
/>
<androidx.constraintlayout.widget.Barrier
<androidx.constraintlayout.widget.Barrier
android:id=
"@+id/barrier_content"
android:id=
"@+id/barrier_content"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
app:barrierDirection=
"bottom"
app:barrierDirection=
"bottom"
app:constraint_referenced_ids=
"txt_
abstract,blog_cover
"
app:constraint_referenced_ids=
"txt_
content
"
tools:layout_editor_absoluteX=
"12dp"
tools:layout_editor_absoluteX=
"12dp"
tools:layout_editor_absoluteY=
"16dp"
/>
tools:layout_editor_absoluteY=
"16dp"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment