Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;android.view.WindowManager$BadTokenException:无法添加窗口--标记null无效;您的活动正在进行吗?”;_Android_Kotlin_Bottom Sheet_Android Mvp_Android Bottomsheetdialog - Fatal编程技术网

&引用;android.view.WindowManager$BadTokenException:无法添加窗口--标记null无效;您的活动正在进行吗?”;

&引用;android.view.WindowManager$BadTokenException:无法添加窗口--标记null无效;您的活动正在进行吗?”;,android,kotlin,bottom-sheet,android-mvp,android-bottomsheetdialog,Android,Kotlin,Bottom Sheet,Android Mvp,Android Bottomsheetdialog,我的应用程序正在使用BottomSheetDialog,它应该通过单击fab打开,但由于某些原因,我出现以下错误: E/AndroidRuntime:致命异常:主 进程:com.vorobyoff.starwars,PID:4048 android.view.WindowManager$BadTokenException:无法添加窗口--标记null无效;你的活动正在进行吗? 在android.view.ViewRootImpl.setView(ViewRootImpl.java:765) 位于

我的应用程序正在使用BottomSheetDialog,它应该通过单击fab打开,但由于某些原因,我出现以下错误:

E/AndroidRuntime:致命异常:主 进程:com.vorobyoff.starwars,PID:4048 android.view.WindowManager$BadTokenException:无法添加窗口--标记null无效;你的活动正在进行吗? 在android.view.ViewRootImpl.setView(ViewRootImpl.java:765) 位于android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356) 在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) 在android.app.Dialog.show上(Dialog.java:330) 在com.vorobyoff.starwars.activities.main.main活动$createBottomSheet$$inlined$apply$lambda$1.onClick(MainActivity.kt:92) 在android.view.view.performClick上(view.java:6294) 在android.view.view$PerformClick.run(view.java:24770) 位于android.os.Handler.handleCallback(Handler.java:790) 位于android.os.Handler.dispatchMessage(Handler.java:99) 位于android.os.Looper.loop(Looper.java:164) 位于android.app.ActivityThread.main(ActivityThread.java:6494) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

MainActivity.kt

类MainActivity:MVPAPPCompataActivity(),MainView{

@InjectPresenter
lateinit var presenter: MainPresenter
private lateinit var binding: ActivityMainBinding
private lateinit var dialog: BottomSheetDialog
private lateinit var filmAdapter: Adapter<Film>
private var favoriteFilmsAdapter: Adapter<Film>? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    setSupportActionBar(MainActionBarBinding.inflate(layoutInflater).root)

    dialog = BottomSheetDialog(applicationContext)

    binding.apply {
        favoriteFilmsButton.setOnClickListener { dialog.show() }

        filmsRecyclerView.apply {
            filmAdapter = getFilmAdapter
            layoutManager =
                LinearLayoutManager(context, RecyclerView.VERTICAL, false)
            ItemTouchHelper(ItemTouchHelperCallback(filmAdapter)).attachToRecyclerView(this)
            addItemDecoration(ItemDecoration(8))
            adapter = filmAdapter
            setHasFixedSize(true)
        }
    }

    presenter.getFilms()
    presenter.favoriteFilms.observe(this@MainActivity, { films ->
        when (true) {
            films.isNullOrEmpty() -> {
                binding.favoriteFilmsButton.apply {
                    visibility = View.GONE
                    isClickable = false
                    dialog.dismiss()
                    return@observe
                }
            }
            favoriteFilmsAdapter == null -> createBottomSheet()
        }

        favoriteFilmsAdapter?.add(films[films.lastIndex])
    })
}

@ProvidePresenter
fun provideMainPresenter(): MainPresenter = MainPresenter(applicationContext)

override fun setFilms(films: List<Film>) = filmAdapter.update(films)

private fun createBottomSheet() {
    binding.favoriteFilmsButton.apply {
        visibility = View.VISIBLE
        isClickable = true
    }

    val bottomSheetView = BottomSheetBinding.inflate(layoutInflater).root
    dialog.setContentView(bottomSheetView)

    bottomSheetView.favorite_films_list.apply {
        favoriteFilmsAdapter = getFavoriteFilmsAdapter
        layoutManager = LinearLayoutManager(this@MainActivity, RecyclerView.VERTICAL, false)
        ItemTouchHelper(ItemTouchHelperCallback(favoriteFilmsAdapter as Adapter<Film>))
            .attachToRecyclerView(this)
        addItemDecoration(ItemDecoration(4))
        adapter = favoriteFilmsAdapter
        setHasFixedSize(true)
    }
}

private val getFilmAdapter = object : Adapter<Film>(
    { startActivity(DetailActivity.showDetail(applicationContext, it.url)) },
    { presenter.insert(it) }
) {
    override fun getLayoutId(position: Int, objects: Film) = R.layout.film_item
}

private val getFavoriteFilmsAdapter = object : Adapter<Film>(
    { startActivity(DetailActivity.showDetail(applicationContext, it.url)) },
    { presenter.delete(it) }
) {
    override fun getLayoutId(position: Int, objects: Film) = R.layout.favorite_film_item
}
@InjectPresenter
lateinit变量演示者:MainPresenter
私有lateinit变量绑定:ActivityMainBinding
私有lateinit变量对话框:BottomSheetDialog
私有lateinit var filmAdapter:适配器
私有变量favoriteFilmsAdapter:适配器?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
绑定=活动主绑定。充气(更平)
setContentView(binding.root)
设置支持操作栏(主操作Barbinding.充气(LayoutFlater.根)
dialog=BottomSheetDialog(applicationContext)
应用{
favoriteFilmsButton.setOnClickListener{dialog.show()}
filmsRecyclerView.apply{
filmAdapter=getFilmAdapter
布局经理=
LinearLayoutManager(上下文,RecyclerView.VERTICAL,false)
ItemTouchHelper(ItemTouchHelperCallback(filmAdapter)).attachToRecyclerView(此)
附加装饰(项目装饰(8))
适配器=胶片适配器
setHasFixedSize(真)
}
}
演示者:getFilms()
主持人。最喜欢的电影。观察(this@MainActivity,{电影->
何时(真){
films.isNullOrEmpty()->{
binding.favoriteFilmsButton.apply{
可见性=View.go
isClickable=false
dialog.discover()的
return@observe
}
}
favoriteFilmsAdapter==null->createBottomSheet()
}
favoriteFilmsAdapter?.add(电影[films.lastIndex])
})
}
@提供者
fun ProviderMainPresenter():MainPresenter=MainPresenter(applicationContext)
覆盖乐趣设置影片(影片:列表)=filmAdapter.update(影片)
private fun createBottomSheet(){
binding.favoriteFilmsButton.apply{
可见性=View.VISIBLE
isClickable=true
}
val bottomSheetView=BottomSheetBinding.充气(LayoutFlater).根部
对话框.setContentView(bottomSheetView)
bottomSheetView.favorite_films_list.apply{
favoriteFilmsAdapter=getFavoriteFilmsAdapter
layoutManager=LinearLayoutManager(this@MainActivity,RecyclerView.VERTICAL,false)
ItemTouchHelper(ItemTouchHelperCallback(favoriteFilmsAdapter作为适配器))
.attachToRecyclerView(本)
附加装饰(项目装饰(4))
适配器=favoriteFilmsAdapter
setHasFixedSize(真)
}
}
private val getFilmAdapter=对象:适配器(
{startActivity(DetailActivity.showtail(applicationContext,it.url))},
{presenter.insert(it)}
) {
覆盖fun getLayoutId(位置:Int,对象:Film)=R.layout.Film\u项
}
private val getFavoriteFilmsAdapter=对象:适配器(
{startActivity(DetailActivity.showtail(applicationContext,it.url))},
{presenter.delete(it)}
) {
覆盖趣味getLayoutId(位置:Int,对象:Film)=R.layout.favorite\u Film\u项
}
}

我们的想法是在bottomSheetView.favorite\u films\u recycler\u视图中向用户显示数据,数据从房间数据库加载,每次在films\u recycler\u视图中滑动一个项目时,它都会被添加到数据库中,通过livedata我了解更改并开始创建一个对话框
git项目:

欢迎来到StackOverflow,Arthur!附加的图像太小,因此无法读取。最好将错误包含为文本。我已修复此问题,感谢您的提示