1
1
package org.ninetripods.mq.study.activity
2
2
3
3
import android.os.Bundle
4
+ import android.view.View
4
5
import androidx.appcompat.app.AppCompatActivity
5
6
import androidx.recyclerview.widget.LinearLayoutManager
6
7
import androidx.recyclerview.widget.RecyclerView
7
8
import org.ninetripods.mq.study.R
8
9
import org.ninetripods.mq.study.base.adapter.BaseAdapter
10
+ import org.ninetripods.mq.study.base.iInterface.ItemClick
9
11
import org.ninetripods.mq.study.chatgpt.ChatVHolderFactory
12
+ import org.ninetripods.mq.study.chatgpt.GuideItemModel
13
+ import org.ninetripods.mq.study.chatgpt.GuideModel
10
14
import org.ninetripods.mq.study.chatgpt.MessageModel
11
15
import org.ninetripods.mq.study.kotlin.ktx.id
12
16
13
17
/* *
14
18
* 仿ChatGPT交互页面
15
19
*/
16
- class ChatGptActivity : AppCompatActivity () {
20
+ class ChatGptActivity : AppCompatActivity (), ItemClick<MessageModel> {
21
+
22
+ companion object {
23
+ const val GUIDE_TEXT_1 = " 今日天气如何?"
24
+ const val GUIDE_TEXT_2 = " 以春天为题写一首诗。"
25
+ const val GUIDE_TEXT_3 = " 明天的彩票号码是多少?"
26
+ const val REPLY_TEXT_1 =
27
+ " 今天夜间到明天白天:晴间多云,西风一到二级,最高温度:25℃(摄氏度),最低温度:15℃(摄氏度)。空气质量:优。紫外线指数:强。 "
28
+ const val REPLY_TEXT_2 = " 春风拂面花香浓,\n " +
29
+ " 轻歌曼舞自心中。\n " +
30
+ " 莺啼燕语声声绕,\n " +
31
+ " 桃红柳绿画境容。\n " +
32
+ " \n " +
33
+ " 山间溪畔寻幽趣,\n " +
34
+ " 芳草如茵踏绿途。\n " +
35
+ " 细雨濯清新心扉,\n " +
36
+ " 梨花雪片点春图。\n " +
37
+ " \n " +
38
+ " 春水涟漪波澜动,\n " +
39
+ " 微风拂面心弦动。\n " +
40
+ " 花开花落轮回处,\n " +
41
+ " 岁月循环春永在。\n " +
42
+ " \n " +
43
+ " 花开花谢芬芳在,\n " +
44
+ " 岁月循环春长在。\n " +
45
+ " 春风拂面花香浓,\n " +
46
+ " 轻歌曼舞自心中。"
47
+ const val REPLY_TEXT_3 =
48
+ " 很抱歉,作为一个语言模型AI,我无法预测未来或者提供未来的信息,包括彩票号码。彩票号码是由随机算法产生的,没有任何规律可循,因此无法预测其结果。购买彩票是一种娱乐方式,但请记得理性购买,不要过度投入金钱。祝您好运!"
49
+ }
17
50
18
51
private val mRv: RecyclerView by id(R .id.rv_view)
19
- private val chatAdapter by lazy { BaseAdapter <MessageModel >(ChatVHolderFactory ()) }
52
+ private val chatAdapter by lazy { BaseAdapter <MessageModel >(ChatVHolderFactory (), this ) }
20
53
21
54
override fun onCreate (savedInstanceState : Bundle ? ) {
22
55
super .onCreate(savedInstanceState)
23
56
setContentView(R .layout.activity_layout_rv)
57
+ mRv.layoutManager = LinearLayoutManager (this ).apply { stackFromEnd = true }
58
+ mRv.adapter = chatAdapter
24
59
setRvInfo()
25
60
}
26
61
27
62
private fun setRvInfo () {
28
63
val list = mutableListOf<MessageModel >()
29
- list.add(MessageModel (" 1" , " 今天天气如何" , type = ChatVHolderFactory .TYPE_ASK_TXT ))
30
- list.add(MessageModel (" 1" , " 今天天气很棒" , type = ChatVHolderFactory .TYPE_REPLY_TXT ))
31
- list.add(MessageModel (" 1" , " 今天天气如何" , type = ChatVHolderFactory .TYPE_REPLY_SPAN ))
32
- for (i in 0 .. 50 ) {
33
- list.add(MessageModel (" 1" , " 今天天气如何" , type = ChatVHolderFactory .TYPE_ASK_TXT ))
34
- }
64
+ list.add(MessageModel (content = " hi,there!" , type = ChatVHolderFactory .TYPE_REPLY_TXT , autoFillAnim = false ))
65
+
66
+ list.add(
67
+ MessageModel (
68
+ type = ChatVHolderFactory .TYPE_REPLY_GUIDE ,
69
+ innerModel = GuideModel (
70
+ sceneTypeName = " 您可以像下面这样问我:" ,
71
+ sceneList = mutableListOf<GuideItemModel >().apply {
72
+ add(GuideItemModel (sceneName = " 今日天气如何?" ))
73
+ add(GuideItemModel (sceneName = " 以春天为题写一首诗。" ))
74
+ add(GuideItemModel (sceneName = " 明天的彩票号码是多少?" ))
75
+ })
76
+ )
77
+ )
78
+
79
+ // list.add(MessageModel(content = "天气预报", type = ChatVHolderFactory.TYPE_ASK_TXT))
80
+ // list.add(MessageModel(content = "天气情况如下:", type = ChatVHolderFactory.TYPE_REPLY_TXT))
81
+ // list.add(MessageModel(type = ChatVHolderFactory.TYPE_REPLY_SPAN))
82
+ // for (i in 0..20) {
83
+ // list.add(MessageModel(content = "天气预报", type = ChatVHolderFactory.TYPE_ASK_TXT))
84
+ // }
35
85
chatAdapter.submitList(list)
36
- mRv.layoutManager = LinearLayoutManager (this )
37
- mRv.adapter = chatAdapter
86
+ }
87
+
88
+ override fun itemClick (itemView : View , model : MessageModel ? , position : Int ) {
89
+ when (itemView.id) {
90
+ R .id.sample_item -> {
91
+ val guideItemModel: GuideItemModel ? =
92
+ (model?.innerModel as ? GuideModel )?.sceneList?.get(position)
93
+ guideItemModel?.let {
94
+ chatAdapter.addModel(
95
+ MessageModel (
96
+ content = it.sceneName,
97
+ type = ChatVHolderFactory .TYPE_ASK_TXT
98
+ )
99
+ )
100
+ val replyTxt = when (it.sceneName) {
101
+ GUIDE_TEXT_1 -> REPLY_TEXT_1
102
+ GUIDE_TEXT_2 -> REPLY_TEXT_2
103
+ GUIDE_TEXT_3 -> REPLY_TEXT_3
104
+ else -> REPLY_TEXT_1
105
+ }
106
+ chatAdapter.addModel(
107
+ MessageModel (
108
+ content = replyTxt,
109
+ type = ChatVHolderFactory .TYPE_REPLY_TXT
110
+ )
111
+ )
112
+ scrollToBottom()
113
+ }
114
+ }
115
+ }
116
+ }
117
+
118
+ private fun scrollToBottom () {
119
+ val position = chatAdapter.itemCount - 1
120
+ mRv.scrollToPosition(position)
38
121
}
39
122
}
0 commit comments