cloudroam
6 天以前 0cf0870889d65f5d11d0b2c8af7bca9442a7ba19
Merge branch 'master' of http://47.96.225.205:8888/r/FirstApp2
已修改7个文件
已添加3个文件
238 ■■■■ 文件已修改
app/src/main/java/com/example/firstapp/activity/LoginActivity.kt 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/activity/SettingActivity.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/adapter/InvitationRecord2Adapter.kt 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/entity/InvitationRecord.kt 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/bg_invitation_record.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_invitation_main.xml 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_invitation_record.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/styles.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/activity/LoginActivity.kt
@@ -15,17 +15,30 @@
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)
        // 这里查看是否已经登录过,如果已经登录过则直接跳转到主页
        // 获取token
        val token = PreferencesManager.getToken()
        if (!token.isNullOrEmpty()) {
            startActivity(Intent(this, MainActivity::class.java))
            finishAffinity() // 结束所有之前的Activity
        }else{
        setContentView(binding.root)
        setupViews()
@@ -36,6 +49,10 @@
        }
    }
    }
    private fun setupViews() {
        binding.btnStartLogin.setOnClickListener {
            if (binding.cbAgreement.isChecked) {
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)
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
}
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(
app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
@@ -379,6 +379,8 @@
        // 只清除内存中的数据
        _categories.value = emptyList()
        categoriesLoaded = false
        // 删除token
        PreferencesManager.clearUserData()
    }
}
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")
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>
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>
                </androidx.cardview.widget.CardView>-->
                <!-- 添加一个权重为1的View,用于填充剩余空间 -->
                <View
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>
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>