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">
+
+                        &lt;!&ndash; 添加"我的邀请记录"标题 &ndash;&gt;
+                        <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