Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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 以编程方式将控件添加到自定义对话框_Android_Android Dialog - Fatal编程技术网

Android 以编程方式将控件添加到自定义对话框

Android 以编程方式将控件添加到自定义对话框,android,android-dialog,Android,Android Dialog,我想显示一个对话框,上面有50个自定义控件(开关按钮)。因此,最好的方法是以编程方式将它们添加到循环中。我尝试制作一个只有一个GroupView元素的布局dilog: <?xml version="1.0" encoding="UTF-8"?> <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation

我想显示一个对话框,上面有50个自定义控件(开关按钮)。因此,最好的方法是以编程方式将它们添加到循环中。我尝试制作一个只有一个GroupView元素的布局dilog:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:background="#AAAAAA"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ViewGroup
        android:layout_height="500dp"
        android:layout_width="500dp"
        android:id="@+id/dlg_view"/>
</LinearLayout>

但它不是这样工作的(它引发了膨胀异常)。我做错了什么?

代码中的问题非常明显:

  • 在布局文件中,您使用的是
    ViewGroup
    ,它是一个抽象类(Android中所有布局的根),无法实例化,因此很可能就是您所说的膨胀异常的原因。使用
    ViewGroup
    的子类之一,如
    LinearLayout
    RelativeLayout
    等,哪一个更适合您

  • 即使在做了我上面写的修改之后,您的代码仍然可以正常工作。首先,
    ViewGroup
    类没有
    add
    方法,您可能指的是
    addView
    方法之一。其次,
    dlgView
    将为
    null
    ,因为此时未显示
    对话框
    ,因此没有要查找的
    视图。您可以通过在其中一个视图上发布
    Runnable
    来延迟设置视图,直到显示
    对话框

    final Dialog res = builder.create();
    oneOfYourViews.post(new Runnable() {
    
        @Override
        public void run() {
            ViewGroup dlgView = (ViewGroup) res.findViewById(R.id.dlg_view);
            MyControl myControl = new MyControl(context);
            dlgView.addView(myControl);             
        }
    });
    
代码添加:

View contentView = inflater.inflate(R.layout.geomap_menu, null)
ViewGroup dlgView = (ViewGroup) contentView.findViewById(R.id.dlg_view);
MyControl myControl = new MyControl(this);
dlgView.addView(myControl); // or add the other views in the loop as many as you want
builder.setView(contentView);
// rest of your code

代码中的问题非常明显:

  • 在布局文件中,您使用的是
    ViewGroup
    ,它是一个抽象类(Android中所有布局的根),无法实例化,因此很可能就是您所说的膨胀异常的原因。使用
    ViewGroup
    的子类之一,如
    LinearLayout
    RelativeLayout
    等,哪一个更适合您

  • 即使在做了我上面写的修改之后,您的代码仍然可以正常工作。首先,
    ViewGroup
    类没有
    add
    方法,您可能指的是
    addView
    方法之一。其次,
    dlgView
    将为
    null
    ,因为此时未显示
    对话框
    ,因此没有要查找的
    视图。您可以通过在其中一个视图上发布
    Runnable
    来延迟设置视图,直到显示
    对话框

    final Dialog res = builder.create();
    oneOfYourViews.post(new Runnable() {
    
        @Override
        public void run() {
            ViewGroup dlgView = (ViewGroup) res.findViewById(R.id.dlg_view);
            MyControl myControl = new MyControl(context);
            dlgView.addView(myControl);             
        }
    });
    
代码添加:

View contentView = inflater.inflate(R.layout.geomap_menu, null)
ViewGroup dlgView = (ViewGroup) contentView.findViewById(R.id.dlg_view);
MyControl myControl = new MyControl(this);
dlgView.addView(myControl); // or add the other views in the loop as many as you want
builder.setView(contentView);
// rest of your code


您是否尝试过使用
LayoutInflater
请提供更多详细信息。更多的代码,你充气。。。有关MyController的代码和详细的错误日志输出。最好是标记错误发生的行。代码已更新。。。错误发生在…移动行
xmlns:android=”http://schemas.android.com/apk/res/android“
在任何其他行之前使用
android:something
在xml布局中声明
LinearLayout
,比如
@Luksprog有什么区别?无论如何,这没有帮助。您是否尝试过使用
LayoutInflater
请提供更多详细信息。更多的代码,你充气。。。有关MyController的代码和详细的错误日志输出。最好是标记错误发生的行。代码已更新。。。错误发生在…移动行
xmlns:android=”http://schemas.android.com/apk/res/android“
在任何其他行之前使用
android:something
在xml布局中声明
LinearLayout
,比如
@Luksprog有什么区别?不管怎么说,这没有帮助。这是一种伪代码,我的问题不是代码中的错误,而是“如何以编程方式将控件添加到自定义对话框”。所以,我相信只有一种正确的方法可以做到这一点。@Tutankhamen我不明白你为什么发布伪代码,然后问你为什么会得到那个异常。将小部件添加到对话框中没有问题(也没有单一正确的方法),正确的方法取决于您希望添加哪些小部件、如何添加这些小部件以及从何处添加这些小部件。关于您的代码,不要直接将视图设置为对话框,展开布局,在循环中添加视图,然后将其设置为对话框。我只是说我已经尝试过这种方法,但它不起作用,因此,可能有人知道如何使其正确。这不是很明显吗?谢谢!这正是我想要的!这是一种伪代码,我的问题不是代码中的错误,而是“如何通过编程向自定义对话框添加控件”。所以,我相信只有一种正确的方法可以做到这一点。@Tutankhamen我不明白你为什么发布伪代码,然后问你为什么会得到那个异常。将小部件添加到对话框中没有问题(也没有单一正确的方法),正确的方法取决于您希望添加哪些小部件、如何添加这些小部件以及从何处添加这些小部件。关于您的代码,不要直接将视图设置为对话框,展开布局,在循环中添加视图,然后将其设置为对话框。我只是说我已经尝试过这种方法,但它不起作用,因此,可能有人知道如何使其正确。这不是很明显吗?谢谢!这正是我想要的!