这是一个基于Android的充值系统项目,采用模块化架构设计,使用Room数据库进行数据持久化存储。
项目包含以下模块:
app
: 主应用模块baselibrary
: 基础库,包含基本工具类和通用组件generallibrary
: 通用功能库,包含数据库操作等通用功能henanlibrary
: 河南地区特定功能模块qihealonelibrary
: 齐河单机版功能模块qiheonlinelibrary
: 齐河在线版功能模块ocridcardlibrary
: 身份证识别模块easysocket
: Socket通信模块pickerviewlibrary
: 选择器视图库在模块级build.gradle中启用ViewBinding:gradle android { buildFeatures { viewBinding true } }
使用示例:
```kotlin
class ExampleActivity : AppCompatActivity() {
private lateinit var binding: ActivityExampleBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityExampleBinding.inflate(layoutInflater)
setContentView(binding.root)
// 直接访问视图
binding.textView.text = "Hello ViewBinding"
}
}
```
在模块级build.gradle中启用DataBinding:gradle android { buildFeatures { dataBinding true } }
使用示例:
1. 布局文件:xml <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.User" /> </data> <LinearLayout> <TextView android:text="@{user.name}" /> </LinearLayout> </layout>
Activity中使用:
```kotlin
class ExampleActivity : AppCompatActivity() {
private lateinit var binding: ActivityExampleBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_example)
binding.user = User("张三")
binding.lifecycleOwner = this
}DataBinding:
在 RecyclerView 适配器中,当列表数据为空时,显示一个空视图(EmptyView)的实现方式:
继承 BaseRecycleAdapter:kotlin class YourAdapter : BaseRecycleAdapter<RecyclerView.ViewHolder>() { // 实现必要的方法 }
在适配器中定义视图类型常量(已在 BaseRecycleAdapter 中定义):kotlin companion object { const val VIEW_TYPE_ITEM = 1 const val VIEW_TYPE_EMPTY = 0 }
重写 getItemViewType 方法:kotlin override fun getItemViewType(position: Int): Int { if (dataList.isEmpty()) { return VIEW_TYPE_EMPTY } return VIEW_TYPE_ITEM }
重写 getItemCount 方法:kotlin override fun getItemCount(): Int { if (dataList.isEmpty()) { return 1 // 返回1表示显示空视图 } return dataList.size }
在 onCreateViewHolder 中处理不同类型的视图:kotlin override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { if (viewType == VIEW_TYPE_EMPTY) { val emptyView: ItemNoMoreBinding = DataBindingUtil.inflate( (parent.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater)!!, R.layout.item_no_more, parent, false ) return ViewHolderEmpty(emptyView) } else { val binding = ItemListBinding.inflate( parent.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater, parent, false ) return ItemViewHolder(binding.root) } }
重写 onBindViewHolder 方法:
```kotlin
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is ViewHolderEmpty) {
// 空视图不需要绑定数据
return
}
// 绑定列表项数据
if (holder is ItemViewHolder) {
val item = dataList[position]
holder.bind(item)
}
}
```
空视图的布局文件示例(item_no_more.xml):
```xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp">
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_empty" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="暂无数据"
android:textColor="@color/text_gray"
android:textSize="14sp" />
这种实现方式的优点:
1. 统一的空视图处理逻辑
2. 支持自定义空视图样式
3. 不影响列表正常数据的显示
4. 便于维护和扩展
@Database(entities = [PassWordCardBean::class, CardData::class, ProjectDataBean::class], version = 1)
主要实体:
- PassWordCardBean: 密码卡数据
- CardData: 卡片数据
- ProjectDataBean: 项目数据
克隆项目:bash git clone [项目地址]
在Android Studio中打开项目
同步Gradle文件
构建项目:bash ./gradlew build
运行应用:
./gradlew installDebug
基础功能库,提供:
- 基础Activity
- 通用工具类
- 基础UI组件
通用功能模块,包含:
- Room数据库实现
- 数据访问对象(DAO)
- 实体类定义
TitleBar是一个自定义的标题栏组件,提供了左中右三个位置的文本和图片设置功能。
<com.dayu.baselibrary.view.TitleBar
android:id="@+id/titleBar"
android:layout_width="match_parent"
android:layout_height="@dimen/dimen_title_height"
app:leftText="返回"
app:leftImage="@drawable/ic_back"
app:centerText="标题"
app:centerImage="@drawable/ic_logo"
app:rightText="更多"
app:rightImage="@drawable/ic_more"/>
设置文本和图片kotlin titleBar.apply { setLeftText("返回") setLeftImage(R.drawable.ic_back) setCenterText("标题") setRightText("更多") setRightImage(R.drawable.ic_more) }
点击事件监听
```kotlin
// 方式1:使用类型常量(推荐)
titleBar.setOnItemclickListner(TitleBar.ClickType_LEFT_IMAGE) { finish() }
titleBar.setOnItemclickListner(TitleBar.ClickType_RIGHT_TEXT) { showMenu() }
// 方式2:使用位置和类型常量(已废弃)
titleBar.setOnItemclickListner(TitleBar.IMAGE, TitleBar.LEFT) { finish() }
```
ClickType_LEFT_TEXT
: 左侧文本点击ClickType_LEFT_IMAGE
: 左侧图片点击ClickType_CENTER_TEXT
: 中间文本点击ClickType_CENTER_IMAGE
: 中间图片点击ClickType_RIGHT_TEXT
: 右侧文本点击ClickType_RIGHT_IMAGE
: 右侧图片点击// 设置右侧按钮状态
titleBar.setRightStatus(false) // 禁用右侧按钮
// 设置右侧图片可见性
titleBar.setRightIMGVisibility(View.GONE)
// 获取中间的TextView
val titleTextView = titleBar.getTitleTextView()
// 获取右侧布局
val rightLayout = titleBar.getLlRight()
[添加许可证信息]
[添加联系方式]