实际上,我正在尝试将我的 recyclerview SQLite 数据传递给另一个片段,在该片段中,我想更新其数据并将更新的数据返回到包含 recyclerview 的片段。
// 这是我的 recyclerview 适配器类
package com.example.test_nav_drawer.ui.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.test_nav_drawer.R
import com.example.test_nav_drawer.UserModel
class UserdbAdapter(context: Context,var usrList: ArrayList<UserModel> = ArrayList() ): RecyclerView.Adapter<UserdbAdapter.UserdbViweHolder>() {
// private var usrList: ArrayList<UserModel> = ArrayList()
fun addItems(items: ArrayList<UserModel>){
this.usrList = items
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = UserdbViweHolder(
LayoutInflater.from(parent.context).inflate(R.layout.card_items_usr_frag1, parent, false)
)
override fun onBindViewHolder(holder: UserdbViweHolder, position: Int) {
var usr = usrList[position]
holder.bindView(usr)
}
override fun getItemCount(): Int {
return usrList.size
}
class UserdbViweHolder(var view: View) : RecyclerView.ViewHolder(view) {
private var id = view.findViewById<TextView>(R.id.tvID)
private var name = view.findViewById<TextView>(R.id.tvUserName)
private var email = view.findViewById<TextView>(R.id.tvUsrEmail)
private var phone = view.findViewById<TextView>(R.id.tvUsrPhone)
private var address = view.findViewById<TextView>(R.id.tvUsrAddress)
private var btnDelete = view.findViewById<Button>(R.id.btnUsrDelete)
fun bindView(usr: UserModel) {
id.text = usr.id.toString()
name.text = usr.name
email.text = usr.email
phone.text = usr.phone
address.text = usr.address
}
}
}
// 这是我的回收站视图的片段
package com.example.test_nav_drawer
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.test_nav_drawer.ui.adapter.UserdbAdapter
class WorkFragment : Fragment(R.layout.fragment_work) {
private lateinit var recyclerView_User: RecyclerView
private lateinit var sqLiteHelper: SQLiteHelper
private lateinit var adapterdb: UserdbAdapter
private lateinit var usrList : ArrayList<UserModel>
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val v = inflater.inflate(R.layout.fragment_work, container, false)
sqLiteHelper = SQLiteHelper(requireActivity())
usrList = sqLiteHelper.getAllUser()
recyclerView_User = v.findViewById(R.id.recycler_view_frag1)
recyclerView_User.setHasFixedSize(true)
recyclerView_User.layoutManager = LinearLayoutManager(context)
adapterdb = UserdbAdapter(requireContext(), usrList)
recyclerView_User.adapter = adapterdb
return v
}
}
// 这是我的 sqlite 助手类
package com.example.test_nav_drawer
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import java.lang.Exception
class SQLiteHelper(context: Context) :
SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_vERSION) {
companion object {
private const val DATABASE_vERSION = 1
private const val DATABASE_NAME = "user.db"
private const val TBL_USER = "tbl_user"
private const val ID = "id"
private const val NAME = "name"
private const val EMAIL = "email"
private const val PHONE = "phone"
private const val ADDRESS = "address"
}
override fun onCreate(db: SQLiteDatabase?) {
val createTblUser = ("CREATE TABLE " + TBL_USER + " ("
+ ID + " INTEGER PRIMARY KEY, " + NAME + " TEXT, "
+ EMAIL + " TEXT, " + PHONE + " TEXT, "
+ ADDRESS + " TEXT " + " )")
db?.execSQL(createTblUser)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db!!.execSQL("DROP TABLE IF EXISTS $TBL_USER")
onCreate(db)
}
fun insertUser(usr: UserModel): Long {
val db = this.writableDatabase
val contentValues = ContentValues()
contentValues.put(ID, usr.id)
contentValues.put(NAME, usr.name)
contentValues.put(EMAIL, usr.email)
contentValues.put(PHONE, usr.phone)
contentValues.put(ADDRESS, usr.address)
val success = db.insert(TBL_USER, null, contentValues)
db.close()
return success
}
fun getAllUser(): ArrayList<UserModel> {
val usrList: ArrayList<UserModel> = ArrayList()
val selectQuery = "SELECT * FROM $TBL_USER"
val db = this.readableDatabase
val cursor: Cursor?
try {
cursor = db.rawQuery(selectQuery, null)
} catch (e: Exception) {
e.printStackTrace()
db.execSQL(selectQuery)
return ArrayList()
}
var id: Int
var name: String
var email: String
var phone: String
var address: String
if (cursor.moveToFirst()) {
do {
id = cursor.getInt(cursor.getColumnIndex("id"))
name = cursor.getString(cursor.getColumnIndex("name"))
email = cursor.getString(cursor.getColumnIndex("email"))
phone = cursor.getString(cursor.getColumnIndex("phone"))
address = cursor.getString(cursor.getColumnIndex("address"))
val usr =
UserModel(id = id, name = name, email = email, phone = phone, address = address)
usrList.add(usr)
} while (cursor.moveToNext())
}
return usrList
}
}
//这是我试图获取我的 receyerview 数据的地方以及我将更新数据的地方,所以这是我的更新片段
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
import android.widget.ProgressBar
import android.widget.Toast
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.example.test_nav_drawer.ui.adapter.UserdbAdapter
import kotlinx.android.synthetic.main.fragment_timeline.*
class TimelineFragment : Fragment(R.layout.fragment_timeline) {
private lateinit var evUsername: EditText
private lateinit var evUserEmail: EditText
private lateinit var evUserPhone: EditText
private lateinit var evUserAddress: EditText
private lateinit var btnAddDetails: Button
private lateinit var sqLiteHelper: SQLiteHelper
private var adapterdb: UserdbAdapter? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val v = inflater.inflate(R.layout.fragment_timeline, container, false)
// val recyclerView_User = v.findViewById<RecyclerView>(R.id.recycler_view_frag1)
// recyclerView_User.layoutManager = LinearLayoutManager(context)
// recyclerView_User.adapter = adapterdb
btnAddDetails = v.findViewById<Button>(R.id.btnAdd)
// var sqLiteHelper: SQLiteHelper
sqLiteHelper = SQLiteHelper(requireActivity())
btnAddDetails.setOnClickListener {
addUser()
getAllUsersDetails()
}
return v
}
private fun getAllUsersDetails() {
val usrList = sqLiteHelper.getAllUser()
Log.e("Testing", "${usrList.size}")
adapterdb?.addItems(usrList)
}
private fun addUser() {
val name = etUserNameLogin.text.toString()
val email = etUserEmailLogin.text.toString()
val phone = etUserPhoneLogin.text.toString()
val address = etUserAddressLogin.text.toString()
if (name.isEmpty() || email.isEmpty() || phone.isEmpty() || address.isEmpty()) {
Toast.makeText(context, "Please Enter Required Fields", Toast.LENGTH_SHORT).show()
clearEditText()
} else {
val usr = UserModel(name = name, email = email, phone = phone, address = address)
val status = sqLiteHelper.insertUser(usr)
//Check insert success or not success
if (status > -1) {
Toast.makeText(context, "User Added...", Toast.LENGTH_SHORT).show()
clearEditText()
} else {
Toast.makeText(context, "Record Not Saved", Toast.LENGTH_LONG).show()
}
}
}
private fun clearEditText() {
etUserNameLogin.setText("")
etUserEmailLogin.setText("")
etUserPhoneLogin.setText("")
etUserAddressLogin.setText("")
etUserNameLogin.requestFocus()
}
}
答案 0 :(得分:0)
嗯,有不同的方法可以实现这一点。 我将告诉你我是如何做到这一点的。
interface OnDataClickListener {
fun onItemClick(Item: UserModel)
}
class RecyclerViewAdapter(private val clickListener: OnDataClickListener) :
fun bindView(usr: UserModel, clicker:OnDataClickListener) {
id.text = usr.id.toString()
name.text = usr.name
email.text = usr.email
phone.text = usr.phone
address.text = usr.address
//Data to be sent to the fragment
clicker.onItemClick(usr)
}
override fun onBindViewHolder(holder: UserdbViweHolder, position: Int) {
var usr = usrList[position]
//clickListener Passed as Parameter here
holder.bindView(usr, clickListener)
}
//change Fragment Defination
class WorkFragment : Fragment(R.layout.fragment_work), OnDataClickListener {
override fun onItemClick(Item: UserModel) {
// Do Whatever you want with this data take it to another fragment or just show in Log, Upto You.
Log.d("WorkFragment", "Clicked Data is $Item")
}
adapterdb = UserdbAdapter(requireContext(), usrList, this)
这应该对你有用。