我实施的RecyclerView
项目包含删除按钮,数据来自Firebase,删除按钮更改了"已保存的"火基地的价值。此Recyclerview出现在主要活动底部导航栏的第三个菜单中。
当我点击删除按钮时,整个活动将重新开始,活动将从底部导航栏的第一个菜单开始
如何停止此重启动作?
我在下面添加RecyclerView
适配器代码:
package com.demo.ash.demoapp
import android.content.Intent
import android.os.Environment
import android.support.v7.widget.RecyclerView
import android.transition.TransitionManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.FirebaseDatabase
import kotlinx.android.synthetic.main.offline_client.view.*
import kotlinx.android.synthetic.main.activity_main.*
import org.json.JSONObject
import java.io.File
/**
* Created by ashwin on 3/5/2018.
*/
class OfflineClientAdapter(val list: MutableList<Client>, val clientIDList:MutableList<String>): RecyclerView.Adapter<OfflineClientViewHolder>() {
lateinit var vg: ViewGroup
override fun getItemCount(): Int {
return list.size
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): OfflineClientViewHolder {
val layoutInflator = LayoutInflater.from(parent?.context)
vg = parent!!
val cellForRow = layoutInflator.inflate(R.layout.offline_client, parent, false)
return OfflineClientViewHolder(cellForRow, "")
}
override fun onBindViewHolder(holder: OfflineClientViewHolder?, position: Int) {
val row = list.get(position)
holder?.view?.NameView?.text = row.cname
holder?.view?.PhnumView?.text = row.cphonenum
holder?.clientID = clientIDList[position]
var encodedimage = IOHelper.stringToBitmap(row.cimage)
holder?.view?.client_image?.setImageBitmap(encodedimage)
val user = FirebaseAuth.getInstance().currentUser
var database = FirebaseDatabase.getInstance().getReference("Users").child(user?.phoneNumber)
.child("Clients").child(clientIDList[position])
holder?.view?.delete_client?.setOnClickListener {
val path = Environment.getExternalStorageDirectory()
val dir = File(path.toString() + "/pranjal/saved_clients.txt")
var clients = IOHelper.stringFromFile(dir)
var t = JSONObject(clients)
t.remove(clientIDList[position])
database.child("saved").setValue(false)
}
}
}
class OfflineClientViewHolder(val view: View, var clientID: String): RecyclerView.ViewHolder(view) {
init{
view.setOnClickListener {
val intent = Intent(view.context, OfflinePatientListActivity::class.java)
intent.putExtra("clientID",clientID)
view.context.startActivity(intent)
}
}
}
答案 0 :(得分:0)
如果您不想在按钮点击时启动活动,为什么还有此代码?
view.context.startActivity(intent)
?
答案 1 :(得分:0)
当我点击删除按钮时,整个活动将重新开始,活动将从底部导航栏的第一个菜单开始
听起来你的应用程序崩溃了。除非您正在做一些无意中(或故意?)重启Activity
的事情。
看起来您正在更改适配器数据(删除它)而不调用必要的方法来警告适配器和recylerview需要更新其数据。确保在更新数据后调用必要的.notify...()
方法。
如果删除按钮是recylerview
的一部分,请确保您在相应的回调/代码中将其考虑在内。
我确保您的
.delete_client?.setOnClickListener { ... }
代码中没有任何崩溃。
还要确保您没有访问其他回调中的空列表。
希望这有帮助!