关于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)
}
答案 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
是否再次启动。