From f496392b24eb9c9a38498cbbf03159ef5aa037d1 Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期一, 21 四月 2025 15:38:08 +0800
Subject: [PATCH] 1.好友邀请-我的邀请记录:列表样式重写,图片显示 2.已登录的用户点击应用图标之后直接登录
---
app/src/main/java/com/example/firstapp/activity/SettingActivity.kt | 4
app/src/main/java/com/example/firstapp/entity/InvitationRecord.kt | 4
app/src/main/res/values/styles.xml | 5 +
app/src/main/res/layout/activity_invitation_main.xml | 70 ++++++++++---
app/src/main/res/layout/item_invitation_record.xml | 35 +++++++
app/src/main/java/com/example/firstapp/activity/LoginActivity.kt | 29 ++++-
app/src/main/java/com/example/firstapp/adapter/InvitationRecord2Adapter.kt | 49 +++++++++
app/src/main/res/drawable/bg_invitation_record.xml | 5 +
app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt | 2
app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt | 49 ++++++++-
10 files changed, 220 insertions(+), 32 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/activity/LoginActivity.kt b/app/src/main/java/com/example/firstapp/activity/LoginActivity.kt
index fcb8a6b..6bde03a 100644
--- a/app/src/main/java/com/example/firstapp/activity/LoginActivity.kt
+++ b/app/src/main/java/com/example/firstapp/activity/LoginActivity.kt
@@ -15,25 +15,42 @@
import android.widget.Button
import android.widget.CheckBox
import android.widget.TextView
+import androidx.activity.viewModels
+import com.example.firstapp.MainActivity
import com.example.firstapp.R
import com.example.firstapp.databinding.ActivityLoginBinding
+import com.example.firstapp.ui.login.LoginViewModel
import com.example.firstapp.utils.PreferencesManager
import kotlin.system.exitProcess
class LoginActivity : AppCompatActivity() {
private lateinit var binding: ActivityLoginBinding
+ private val viewModel: LoginViewModel by viewModels()
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityLoginBinding.inflate(layoutInflater)
- setContentView(binding.root)
- setupViews()
- val phone=PreferencesManager.getLastLoginPhone()
- // 如果phone不存在则展示弹框
- if (phone.isNullOrEmpty()) {
- showConfirmDialog()
+ // 这里查看是否已经登录过,如果已经登录过则直接跳转到主页
+ // 获取token
+ val token = PreferencesManager.getToken()
+ if (!token.isNullOrEmpty()) {
+ startActivity(Intent(this, MainActivity::class.java))
+ finishAffinity() // 结束所有之前的Activity
+ }else{
+ setContentView(binding.root)
+ setupViews()
+
+ val phone=PreferencesManager.getLastLoginPhone()
+ // 如果phone不存在则展示弹框
+ if (phone.isNullOrEmpty()) {
+ showConfirmDialog()
+ }
}
+
+
+
}
private fun setupViews() {
diff --git a/app/src/main/java/com/example/firstapp/activity/SettingActivity.kt b/app/src/main/java/com/example/firstapp/activity/SettingActivity.kt
index 1d2bca2..4741173 100644
--- a/app/src/main/java/com/example/firstapp/activity/SettingActivity.kt
+++ b/app/src/main/java/com/example/firstapp/activity/SettingActivity.kt
@@ -168,6 +168,7 @@
lifecycleScope.launch {
try {
// 清除本地的数据库
+
RetrofitClient.apiService.closeAccount()
Core.code.deleteAll()
@@ -175,6 +176,9 @@
Core.keyword.deleteAll()
// Core.reminder.deleteAll()
+ // 清楚登录相关信息
+ homeViewModel.logout()
+
dialog.dismiss()
// 跳转到 LoginActivity 并清除之前的任务栈
var intent = Intent(this@SettingActivity, LoginActivity::class.java)
diff --git a/app/src/main/java/com/example/firstapp/adapter/InvitationRecord2Adapter.kt b/app/src/main/java/com/example/firstapp/adapter/InvitationRecord2Adapter.kt
new file mode 100644
index 0000000..57131c2
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/adapter/InvitationRecord2Adapter.kt
@@ -0,0 +1,49 @@
+package com.example.firstapp.adapter
+
+import android.content.Context
+import android.text.TextUtils
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.example.firstapp.R
+import com.example.firstapp.entity.InvitationRecord
+import com.google.android.material.imageview.ShapeableImageView
+
+
+class InvitationRecord2Adapter(
+ private val records: List<InvitationRecord>
+) : RecyclerView.Adapter<InvitationRecord2Adapter.RecordViewHolder>() {
+
+
+
+ class RecordViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val avatarImageView: ShapeableImageView = itemView.findViewById(R.id.avatarImageView)
+ val nameTextView: TextView = itemView.findViewById(R.id.nameTextView)
+ val statusTextView: TextView = itemView.findViewById(R.id.statusTextView)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecordViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.item_invitation_record, parent, false)
+ return RecordViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: RecordViewHolder, position: Int) {
+ val record = records[position]
+
+ // 加载网络图片
+ Glide.with(holder.itemView.context)
+ .load(record.cover) // 网络图片 URL
+ .placeholder(R.drawable.default_avatar) // 加载中占位图
+ .error(R.drawable.default_avatar) // 加载失败时显示的图片
+ .into(holder.avatarImageView)
+
+ holder.nameTextView.text = record.userName
+ holder.statusTextView.text = record.status
+ }
+
+ override fun getItemCount(): Int = records.size
+}
diff --git a/app/src/main/java/com/example/firstapp/entity/InvitationRecord.kt b/app/src/main/java/com/example/firstapp/entity/InvitationRecord.kt
index eb514c9..8091ac5 100644
--- a/app/src/main/java/com/example/firstapp/entity/InvitationRecord.kt
+++ b/app/src/main/java/com/example/firstapp/entity/InvitationRecord.kt
@@ -4,7 +4,9 @@
val userId: String,
val userName: String,
val reward: String,
- val status: String
+ val status: String,
+ val cover:String,
+
)
data class InvitationRecords(
diff --git a/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt b/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
index e1357b3..1507d6e 100644
--- a/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
+++ b/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
@@ -379,6 +379,8 @@
// 只清除内存中的数据
_categories.value = emptyList()
categoriesLoaded = false
+ // 删除token
+ PreferencesManager.clearUserData()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt b/app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt
index efb0e6c..9fb0021 100644
--- a/app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt
+++ b/app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt
@@ -19,6 +19,7 @@
import android.view.ViewGroup
import android.widget.Button
import android.widget.ImageView
+import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
@@ -31,6 +32,7 @@
import com.example.firstapp.App.Companion.context
import com.example.firstapp.R
import com.example.firstapp.adapter.InvitationAdapter
+import com.example.firstapp.adapter.InvitationRecord2Adapter
import com.example.firstapp.adapter.InvitationRecordAdapter
import com.example.firstapp.database.request.SmsLoginRequest
import com.example.firstapp.database.service.RetrofitClient
@@ -49,7 +51,7 @@
private lateinit var recyclerSuccessView: RecyclerView
private lateinit var recyclerRecordView: RecyclerView
private lateinit var adapter: InvitationAdapter
- private lateinit var recordadapter: InvitationRecordAdapter
+// private lateinit var recordadapter: InvitationRecordAdapter
private var data = mutableListOf<InvitationRecord>()
private var recorddata = mutableListOf<InvitationRecord>()
private val handler = Handler(Looper.getMainLooper())
@@ -57,6 +59,11 @@
private var currentScrollPosition = 0
private var currentRecordScrollPosition = 0
private var itemHeight = 0 // 动态存储item高度
+
+ private lateinit var invitedRecordRecyclerView2: RecyclerView
+ private lateinit var invitationAdapter: InvitationRecord2Adapter
+
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -68,7 +75,7 @@
//初始化Adapter
initSuccessAdapter()
- initRecorddapter()
+// initRecorddapter()
//加载数据
getInvitereward()
@@ -94,6 +101,8 @@
clipboard.setPrimaryClip(clip)
Toast.makeText(this, "已复制邀请码", Toast.LENGTH_SHORT).show()
}
+
+
}
@@ -142,8 +151,8 @@
}
}
// 记录列表
- recyclerRecordView = findViewById(R.id.invitationrecordRecyclerView)
- recyclerRecordView.layoutManager = LinearLayoutManager(this)
+// recyclerRecordView = findViewById(R.id.invitationrecordRecyclerView)
+// recyclerRecordView.layoutManager = LinearLayoutManager(this)
}
private fun initSuccessAdapter() {
@@ -162,10 +171,25 @@
recyclerSuccessView.adapter = adapter
}
- private fun initRecorddapter() {
- recordadapter = InvitationRecordAdapter(this, recorddata)
- recyclerRecordView.adapter = recordadapter
- }
+// private fun initRecorddapter() {
+// recordadapter = InvitationRecordAdapter(this, recorddata)
+// recyclerRecordView.adapter = recordadapter
+// }
+// private fun initRecorddapter() {
+// recordadapter = InvitationRecordAdapter(this, recorddata).apply {
+// registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
+// override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
+// // 数据插入时检查高度
+// recyclerRecordView.post {
+// if (recyclerRecordView.childCount > 0) {
+// itemHeight = recyclerRecordView.getChildAt(0).height
+// }
+// }
+// }
+// })
+// }
+// recyclerRecordView.adapter = recordadapter
+// }
private fun getInvitereward() {
lifecycleScope.launch {
@@ -184,10 +208,17 @@
addAll(records.myInvite ?: emptyList()) // 注意这里使用myInvite
}
+ // 加载适配器
+ invitedRecordRecyclerView2 = findViewById(R.id.invited_record_recycler_view_2)
+ invitedRecordRecyclerView2.layoutManager = LinearLayoutManager(this@InvitationActivity)
+ invitationAdapter = InvitationRecord2Adapter(records.myInvite)
+ invitedRecordRecyclerView2.adapter = invitationAdapter
+
+
// 在UI线程更新适配器
withContext(Dispatchers.Main) {
adapter.notifyDataSetChanged()
- recordadapter.notifyDataSetChanged()
+// recordadapter.notifyDataSetChanged()
}
} ?: run {
Log.w("API", "Response data is null")
diff --git a/app/src/main/res/drawable/bg_invitation_record.xml b/app/src/main/res/drawable/bg_invitation_record.xml
new file mode 100644
index 0000000..4d71872
--- /dev/null
+++ b/app/src/main/res/drawable/bg_invitation_record.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="#FFFFFF" /> <!-- 背景白色 -->
+ <corners android:radius="12dp" /> <!-- 圆角半径 -->
+</shape>
diff --git a/app/src/main/res/layout/activity_invitation_main.xml b/app/src/main/res/layout/activity_invitation_main.xml
index 2859f8b..120d1f0 100644
--- a/app/src/main/res/layout/activity_invitation_main.xml
+++ b/app/src/main/res/layout/activity_invitation_main.xml
@@ -39,15 +39,15 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
- android:padding="16dp"
+ android:padding="10dp"
android:textColor="#FFFFFF"
android:textSize="15sp" />
<!-- 横幅广告区域 -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
- android:layout_height="160dp"
- android:layout_marginBottom="16dp"
+ android:layout_height="140dp"
+ android:layout_marginBottom="10dp"
app:cardCornerRadius="13dp"
app:cardPreventCornerOverlap="true">
@@ -62,13 +62,13 @@
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="20dp"
+ android:layout_marginBottom="10dp"
app:cardCornerRadius="38dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/invitationsuccessRecyclerView"
android:layout_width="match_parent"
- android:layout_height="60dp"
+ android:layout_height="40dp"
android:nestedScrollingEnabled="false"
android:overScrollMode="never" />
</androidx.cardview.widget.CardView>
@@ -82,7 +82,7 @@
android:backgroundTint="#FF0000"
android:insetTop="0dp"
android:insetBottom="0dp"
- android:padding="12dp"
+ android:padding="10dp"
android:text="立即邀请好友"
android:textColor="#FFFFFF"
android:textSize="16sp"
@@ -288,13 +288,14 @@
</LinearLayout>
</androidx.cardview.widget.CardView>
- <!-- 邀请记录区域 -->
- <androidx.cardview.widget.CardView
+
+ <LinearLayout
+ android:id="@+id/invitationrecordLinearLayout"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginBottom="20dp"
- app:cardCornerRadius="6dp"
- app:cardPreventCornerOverlap="true">
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:background="@drawable/bg_invitation_record"
+ android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
@@ -305,13 +306,45 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:gravity="center"
+ android:paddingLeft="16dp"
+ android:paddingBottom="5dp"
+ android:text="我的邀请记录"
+ android:textColor="#333333"
+ android:textSize="16sp"
+ android:textStyle="bold" />
+
+ </LinearLayout>
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/invited_record_recycler_view_2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ </LinearLayout>
+
+ <!-- 邀请记录区域 -->
+ <!-- <androidx.cardview.widget.CardView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:cardCornerRadius="6dp"
+ >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <!– 添加"我的邀请记录"标题 –>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
android:paddingLeft="16dp"
android:paddingBottom="8dp"
android:text="我的邀请记录"
android:textColor="#333333"
android:textSize="16sp"
- android:textStyle="bold"
- android:gravity="center" />
+ android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/invitationrecordRecyclerView"
@@ -319,8 +352,13 @@
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
android:overScrollMode="never" />
- </LinearLayout>
- </androidx.cardview.widget.CardView>
+
+ </LinearLayout>
+
+
+ </androidx.cardview.widget.CardView>-->
+
+
<!-- 添加一个权重为1的View,用于填充剩余空间 -->
<View
diff --git a/app/src/main/res/layout/item_invitation_record.xml b/app/src/main/res/layout/item_invitation_record.xml
new file mode 100644
index 0000000..1ab26b5
--- /dev/null
+++ b/app/src/main/res/layout/item_invitation_record.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:orientation="horizontal"
+ android:padding="8dp">
+
+ <com.google.android.material.imageview.ShapeableImageView
+ android:id="@+id/avatarImageView"
+ android:layout_width="30dp"
+ android:layout_height="30dp"
+ android:layout_marginLeft="10dp"
+ android:scaleType="centerCrop"
+
+ app:shapeAppearance="@style/CircleImage"
+ />
+
+ <TextView
+ android:id="@+id/nameTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="30dp"
+ android:layout_marginLeft="10dp"
+ android:gravity="center_vertical"
+ android:minWidth="100dp"
+ android:text="Name" />
+
+ <TextView
+ android:id="@+id/statusTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="30dp"
+ android:layout_marginLeft="50dp"
+ android:gravity="center_vertical"
+ android:text="Status" />
+</LinearLayout>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 7611b17..d72ae95 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -63,4 +63,9 @@
<item name="android:textColor">#000000</item> <!-- 设置标题颜色 -->
</style>
+ <style name="CircleImage">
+ <item name="cornerFamily">rounded</item>
+ <item name="cornerSize">50%</item>
+ </style>
+
</resources>
--
Gitblit v1.9.3