Kotlin对话框java.lang.IllegalStateException:指定的子代已经有一个父代。您必须先在孩子的父母上调用removeView()

时间:2018-06-24 20:47:02

标签: kotlin alertdialog java.lang

一旦用户在我的活动上单击 change_account ,就会显示一个对话框,然后,一旦用户在此对话框上单击create count,我想显示另一个对话框。

但是不幸的是我遇到了这个错误:

  

E / AndroidRuntime:致命异常:main
  java.lang.IllegalStateException:指定的子代已经有一个父代。您必须先在孩子的父母上调用removeView()。

我已经在网上看到了一些代码来删除removeView(),但是我不知道如何使用它。尤其是因为我从另一个对话框调用对话。

这是我的代码,导致错误的那一行是

 creatCount.create().apply { show() }

这是完整的代码:

class ClientAcountActivity : AppCompatActivity(),AdapterView.OnItemClickListener{

    override fun onCreate(savedInstanceState: Bundle?) {

        ....

        change_account.setOnClickListener { openChangeCompte() }

    }


    fun openChangeCompte()
    {
        val dialogBuilder = AlertDialog.Builder(this)
        val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        val row = inflater.inflate(R.layout.dialog_listview, null, false)
        val listAccount= row.findViewById<ListView>(R.id.transfer_type_list)
        Log.d("ClientAccountActivity", Injection.provideAccountRepository().availableAccountsType.toString())
        listAccount.adapter = CountChangeAdapter(Injection.provideAccountRepository().availableAccountsType, this)

       listAccount.onItemClickListener = AdapterView.OnItemClickListener { adapterView: AdapterView<*>, view: View, i: Int, id: Long ->

           if((adapterView.getCount()!=4) && (i==adapterView.getCount()-1))
                {
                     val creatCount: AlertDialog.Builder = AlertDialog.Builder(this).apply {
                           setView(row)
                           setTitle("Quel compte voulez vous créer ")
                           setPositiveButton("OK",  DialogInterface.OnClickListener() {
                               dialogInterface: DialogInterface, i: Int ->
                               fun onClick(dialog:DialogInterface , which:Int) {
                           }})
                           setNegativeButton("Cancel",  DialogInterface.OnClickListener() {
                               dialogInterface: DialogInterface, i: Int ->
                               fun  onClick(dialog:DialogInterface ,  which:Int) {
                                   finish()
                           }})
                       }
                    creatCount.create().apply { show() } //the line which cause the pb 

                }
                else
                {
                    Injection.provideAccountRepository().selectedAccount=id.toInt()
                    updateBalance()
                    changeAccoutDialog!!.dismiss()
                }
            }
        dialogBuilder.setView(row)
        dialogBuilder.setTitle("Quel compte voulez vous choisir?")
        changeAccoutDialog = dialogBuilder.create().apply { show() }
    }
}

1 个答案:

答案 0 :(得分:2)

这里的问题是由于将变量行设置为两个对话框的视图:您应该创建第二行(使用充气器具有相同的布局)以便将其设置为第二个对话框。这是已更正的代码:

- (void)tableView:(UITableView *)tableView didSelectRestaurant:(Restaurant *)restaurant {
    if (self.splitViewController.viewControllers.count > 1) {
        UINavigationController *nvc = [self.splitViewController.viewControllers objectAtIndex:1];
        RestaurantsTabViewController *rtc = [nvc.viewControllers objectAtIndex:0];
        [rtc addTabWithRestaurant:restaurant];
    } else {
        RestaurantsTabViewController *rtc = [RestaurantsTabViewController new];
        [rtc addTabWithRestaurant:restaurant];
        [self.splitViewController showDetailViewController:rtc sender:self];
    }
}