如何在AlertDialog中创建Chip对象?

问题描述

我的主要活动是加载片段。在该片段中,我有警报对话框。我想在此警报对话框中动态加载芯片。

警报对话框代码如下:

private void showAddDialog() {
    android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getContext());
    builder.setTitle("Create Service");

    View itemView = LayoutInflater.from(getContext()).inflate(R.layout.layout_update_service,null);
  
    chip_group_filter = (ChipGroup) itemView.findViewById(R.id.chip_group_addon);
    
   //Load All Chip Filters
    displayFilterList(chip_group_filter);       

    builder.setNegativeButton("CANCEL",(dialogInterface,which) -> {
        dialogInterface.dismiss();
    });

    builder.setPositiveButton("CREATE",which) -> {
         dialogInterface.dismiss();

    });

    builder.setView(itemView);
    android.app.AlertDialog updateDialog = builder.create();
    updateDialog.show();
}

要按如下方式动态加载方法逻辑,它会在创建Chip Object时使我的应用程序崩溃:

private void displayFilterList(ChipGroup chip_group_filter) {
    if (Common.categorySelected.getFilters().size() > 0) {
        chip_group_filter.clearCheck();
        chip_group_filter.removeAllViews();

        //Add on All Views
        for (FilterModel filterModel : Common.categorySelected.getFilters()) {
            Chip chip = (Chip) getLayoutInflater().inflate(R.layout.layout_filter_item,null); //APP CRASH HERE
            chip.setText(new StringBuilder(filterModel.getName()));

            chip_group_filter.addView(chip);

        }
    }
}

堆栈跟踪:

2020-10-11 00:05:15.394 13562-13562/com.example.hstudioserver E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.hstudioserver,PID: 13562
    android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class com.google.android.material.chip.Chip
    Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class com.google.android.material.chip.Chip
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:647)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at com.heli.hbstudioserver.ui.servicelist.ServiceListFragment.displayFilterList(ServiceListFragment.java:391)
        at com.heli.hbstudioserver.ui.servicelist.ServiceListFragment.showAddDialog(ServiceListFragment.java:312)
        at com.heli.hbstudioserver.ui.servicelist.ServiceListFragment.onoptionsItemSelected(ServiceListFragment.java:94)
        at androidx.fragment.app.Fragment.performOptionsItemSelected(Fragment.java:2830)
        at androidx.fragment.app.FragmentManager.dispatchOptionsItemSelected(FragmentManager.java:2717)
        at androidx.fragment.app.Fragment.performOptionsItemSelected(Fragment.java:2834)
        at androidx.fragment.app.FragmentManager.dispatchOptionsItemSelected(FragmentManager.java:2717)
        at androidx.fragment.app.FragmentController.dispatchOptionsItemSelected(FragmentController.java:412)
        at androidx.fragment.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:389)
        at androidx.appcompat.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:219)
        at androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
        at androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
        at androidx.appcompat.app.ToolbaractionBar$2.onMenuItemClick(ToolbaractionBar.java:64)
        at androidx.appcompat.widget.Toolbar$1.onMenuItemClick(Toolbar.java:207)
        at androidx.appcompat.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:781)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:981)
        at androidx.appcompat.widget.ActionMenuView.invokeItem(ActionMenuView.java:625)
        at androidx.appcompat.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:151)
        at android.view.View.performClick(View.java:6597)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).
        at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:248)
        at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:222)
        at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:150)
2020-10-11 00:05:15.394 13562-13562/com.example.hstudioserver E/AndroidRuntime:     at com.google.android.material.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.java:81)
        at com.google.android.material.chip.ChipDrawable.loadFromAttributes(ChipDrawable.java:334)
        at com.google.android.material.chip.ChipDrawable.createFromAttributes(ChipDrawable.java:276)
        at com.google.android.material.chip.Chip.(Chip.java:193)
        at com.google.android.material.chip.Chip.(Chip.java:186)
            ... 40 more
    
    
    --------- beginning of system
2020-10-11 00:05:16.147 2314-2416/? E/ModuleIdSetter: exception when setting module id
    java.lang.IllegalStateException: Unable to get current module info in ModuleManager created with non-module Context
        at com.google.android.chimera.config.ModuleManager.getCurrentModule(:com.google.android.gms@203615031@20.36.15 (100700-333172415):2)
        at aflp.a(:com.google.android.gms@203615031@20.36.15 (100700-333172415):4)
        at afls.b(:com.google.android.gms@203615031@20.36.15 (100700-333172415):9)
        at afia.a(UnkNown Source:0)
        at rve.a(:com.google.android.gms@203615031@20.36.15 (100700-333172415):0)
        at rrl.c(:com.google.android.gms@203615031@20.36.15 (100700-333172415):1)
        at rrj.b(:com.google.android.gms@203615031@20.36.15 (100700-333172415):1)
        at rua.b(:com.google.android.gms@203615031@20.36.15 (100700-333172415):6)
        at rua.c(:com.google.android.gms@203615031@20.36.15 (100700-333172415):5)
        at rua.b(:com.google.android.gms@203615031@20.36.15 (100700-333172415):10)
        at rua.a(:com.google.android.gms@203615031@20.36.15 (100700-333172415):17)
        at rua.e(:com.google.android.gms@203615031@20.36.15 (100700-333172415):7)
        at sjj.a(:com.google.android.gms@203615031@20.36.15 (100700-333172415):2)
        at sik.a(:com.google.android.gms@203615031@20.36.15 (100700-333172415):10)
        at sib.a(:com.google.android.gms@203615031@20.36.15 (100700-333172415):0)
        at sie.handleMessage(:com.google.android.gms@203615031@20.36.15 (100700-333172415):27)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at afas.a(:com.google.android.gms@203615031@20.36.15 (100700-333172415):2)
        at afas.dispatchMessage(:com.google.android.gms@203615031@20.36.15 (100700-333172415):11)
        at android.os.Looper.loop(Looper.java:193)
        at android.os.HandlerThread.run(HandlerThread.java:65)

解决方法

您必须将Theme.MaterialComponents主题用作app theme。例如:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
  ...
</style>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...