在recyclerview中的项目内单击按钮可刷新整个活动

时间:2018-05-03 13:46:29

标签: firebase firebase-realtime-database android-recyclerview kotlin

我实施的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)
        }
    }
}

2 个答案:

答案 0 :(得分:0)

如果您不想在按钮点击时启动活动,为什么还有此代码?

view.context.startActivity(intent)

答案 1 :(得分:0)

  

当我点击删除按钮时,整个活动将重新开始,活动将从底部导航栏的第一个菜单开始

听起来你的应用程序崩溃了。除非您正在做一些无意中(或故意?)重启Activity的事情。

看起来您正在更改适配器数据(删除它)而不调用必要的方法来警告适配器和recylerview需要更新其数据。确保在更新数据后调用必要的.notify...()方法。

如果删除按钮是recylerview的一部分,请确保您在相应的回调/代码中将其考虑在内。

我确保您的 .delete_client?.setOnClickListener { ... }代码中没有任何崩溃。

还要确保您没有访问其他回调中的空列表。

希望这有帮助!