使用Kotlin在Android中启动startActivity之后没有任何反应

时间:2018-09-27 07:30:31

标签: android kotlin

关于android“ startActivity()”方法,我有一个很奇怪的问题。在我调用“ startActivity()”方法后,新的Activity无法启动。

这是我的代码:

val ini = this
adapter.setOnDetailListener(object : DetailListener {
    override fun onDetail(key: String) {
        val destination = Intent(ini, DetailKontrakanActivity::class.java)

        Log.e("ANAK_KOST","onDetailKontrakan")


        destination.putExtra("KEY",key)

        ini.startActivity(destination)
    }
})

这是我的日志:

2018-09-27 14:12:38.621 478-2366/? E/ANDR-PERF-MPCTL: Invalid profile no. 0, total profiles 0 only
2018-09-27 14:12:38.770 17514-17514/? E/ANAK_KOST: goToDetailKontrakan
2018-09-27 14:12:38.771 17514-17514/? E/ANAK_KOST: onDetailKontrakan
2018-09-27 14:12:38.771 17514-17514/? I/Timeline: Timeline: Activity_launch_request time:63333082
2018-09-27 14:12:38.776 1546-2979/? I/ActivityManager: START u0 {cmp=galihlprakoso.com.anakkostv3/.View.ReusableActivities.DetailKostActivity (has extras)} from uid 10391 on display 0
2018-09-27 14:12:38.784 1546-2979/? D/ActivityTrigger: ActivityTrigger activityPauseTrigger 
2018-09-27 14:12:38.789 17514-17514/? I/FIAM.Headless: Removing display event listener
2018-09-27 14:12:38.796 2703-2819/? I/WtProcessController: MOVE TO FOREGROUND: galihlprakoso.com.anakkostv3 10391
2018-09-27 14:12:38.796 2703-2819/? I/WtProcessController: FOREGROUND INFO: name=galihlprakoso.com.anakkostv3 uid=10391 pid=17514 TaskId:265
2018-09-27 14:12:38.797 1546-2979/? I/Timeline: Timeline: App_transition_ready time:63333108

日志“ onDetailKontrakan”上打印了日志,但startActivity()方法未调用新的Activity。

我在某些片段上使用了该代码,但无法在活动中使用。

这是我的整个适配器类代码:

class DataKostAdapter(var listKost: ArrayList<Kost>, private val activity: Context,private val tipe:Int) : RecyclerView.Adapter<DataKostAdapter.DataKostViewHolder>() {

    companion object {

        val CRUD = 0
        val NO_CRUD = 1

    }

    private var hapusListener:HapusListener? = null
    private var detailListener:DetailListener? = null
    private var backupListKost:ArrayList<Kost> = ArrayList()


    init{
        listKost.forEach { kost ->
            backupListKost.add(kost)
        }
    }


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DataKostViewHolder {
        val binding = DataBindingUtil.inflate<ItemRvDataKostBinding>(LayoutInflater.from(parent.context),
                        R.layout.item_rv_data_kost,parent,false)


        return DataKostViewHolder(binding)
    }

    override fun onBindViewHolder(holder: DataKostViewHolder, position: Int) {
        val kost = listKost[position]

        holder.binding.kost = kost
        holder.binding.adapter = this

        if (kost.gambar.length != 0) {
            Glide.with(activity).load(kost.gambar).into(holder.binding.itemRvDataKostImg)
        }

        holder.binding.itemRvDataKostWrapper
                .setOnClickListener(object : View.OnClickListener{
                    override fun onClick(p0: View?) {
                        goToDetailKost(kost)
                    }
                })

        if(tipe == NO_CRUD){
            holder.binding.itemRvDataKostEdit.visibility = View.GONE
            holder.binding.itemRvDataKostHapus.visibility = View.GONE
        }
    }

    override fun getItemCount(): Int {
        return listKost.size
    }

    fun goToEditKost(kost: Kost) {
        val intent = Intent(activity, FormKostActivity::class.java)

        intent.putExtra(FormKostActivity.TIPE_FORM,FormKostActivity.EDIT)
        intent.putExtra("KEY",kost.key)

        activity.startActivity(intent)
    }

    fun setOnHapusListener(hapusListener: HapusListener){
        this.hapusListener = hapusListener
    }

    fun setOnDetailListener(detailListener: DetailListener){
        this.detailListener = detailListener
    }

    fun hapusKost(kost: Kost){
        if(hapusListener!=null){
            hapusListener!!.onHapus(kost.key)
        }
    }

    fun goToDetailKost(kost: Kost) {

        Log.e("ANAK_KOST","goToDetailKost")

        if(detailListener!=null){
            detailListener!!.onDetail(kost.key)
        }
    }

    fun search(query:String){

        listKost.clear()

        if(query == "" || query.isEmpty()){

            backupListKost.forEach { kost ->
                listKost.add(kost)
            }

        }else{

            backupListKost.forEach { kost ->

                if(kost.nama.contains(query, ignoreCase = true)){

                    listKost.add(kost)
                }

            }
        }

        notifyDataSetChanged()
    }


    fun sortByHargaSewa(){

        val temp = ArrayList<Kost>()

        val length = listKost.size

        Log.e("ANAK_KOST","Length :"+length)

        if(length>1){
            while(true){

                var chosen = 0

                for(i in 0..listKost.size-1){

                    val kost = listKost.get(i)
                    val termurah = listKost.get(chosen)

                    if(kost.harga_sewa <= termurah.harga_sewa){
                        chosen = i
                    }

                }

                temp.add(listKost.get(chosen))
                listKost.removeAt(chosen)


                if(temp.size == length){
                    break
                }
            }

            listKost = temp
            notifyDataSetChanged()
        }

    }

    fun sortByRating(){

        val temp = ArrayList<Kost>()

        val length = listKost.size

        if(length>1){
            while(true){

                var chosen = 0

                for(i in 0..listKost.size-1){

                    val kost = listKost.get(i)
                    val terpopuler = listKost.get(chosen)

                    if(kost.rating <= terpopuler.rating){
                        chosen = i
                    }

                }

                temp.add(listKost.get(chosen))
                listKost.removeAt(chosen)

                if(temp.size==length){
                    break
                }

            }

            listKost = temp
            notifyDataSetChanged()
        }
    }





    inner class DataKostViewHolder(internal var binding: ItemRvDataKostBinding) : RecyclerView.ViewHolder(binding.root)

}

4 个答案:

答案 0 :(得分:2)

一个常见的问题是活动开始后立即完成,因此您不会看到它出现。

答案 1 :(得分:1)

问题可能是未在UI线程上调用回调。 试试这个:

runOnUiThread {
    Log.e("ANAK_KOST","onDetailKontrakan")
    val destination = Intent(this@YourActivity.baseContext, YourActivity::class.java)
            .also { it.putExtra("KEY",key) } 
    startActivity(destination)
}

答案 2 :(得分:0)

执行此操作:

val destination= Intent(baseContext,YourActivity::class.java)

Log.e("ANAK_KOST","onDetailKontrakan")

destination.putExtra("KEY",key)

baseContext.startActivity(destination)

在Java中,我在Adapter中这样使用:

Intent intent = new Intent(context, NextActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

答案 3 :(得分:0)

我以前遇到过这个问题。就我而言,呼叫者Activity和目的地Activity是相同的。我的意思是通过单击RecyclerView中X的Activity项来尝试启动X。问题是清单中X的launchMode。我已经定义了singleTask。因此Activity并没有重新开始,并且感觉startActivity调用时什么也没发生。

如果遇到这种情况,可以尝试使用onNewIntent来了解Activity是否再次启动。