Java 动态创建视图并将其映射到对象

Java 动态创建视图并将其映射到对象,java,android,android-custom-view,android-recyclerview,Java,Android,Android Custom View,Android Recyclerview,我创建了以下活动: 它确实会滚动,如果你滚动,你会看到这个 所以你有两个房间:第一个是双人房,有两名乘客(乘客)。第二个房间是单人房,只有一名乘客 现在,我的活动需要动态创建,以适应用户选择预订的房间组合。可能是两间单人房,两间双人房等等 在这个活动中,我需要做的是让用户插入每位乘客的姓名并检索,这样我就可以将他们发送到Web服务以完成预订 我已经为乘客准备了一件物品。它是Pax类,有三个字段: 字符串标题 字符串名称 字符串姓氏 你可以猜出它是干什么用的 现在,我还创建了一些RoomI

我创建了以下活动:

它确实会滚动,如果你滚动,你会看到这个

所以你有两个房间:第一个是双人房,有两名乘客(乘客)。第二个房间是单人房,只有一名乘客

现在,我的活动需要动态创建,以适应用户选择预订的房间组合。可能是两间单人房,两间双人房等等

在这个活动中,我需要做的是让用户插入每位乘客的姓名并检索,这样我就可以将他们发送到Web服务以完成预订

我已经为乘客准备了一件物品。它是Pax类,有三个字段:

  • 字符串标题
  • 字符串名称
  • 字符串姓氏
你可以猜出它是干什么用的

现在,我还创建了一些RoomInstance对象,每个RoomInstance都有以下参数:

  • 字符串类型
    -->适用于单、双
  • int numberOfPaxes
    -->这个房间里有多少人
  • ArrayList paxes
    -->乘客名单
我通过在搜索时创建的RoomInstance列表上循环来创建上述活动。我就是这么做的:

        for(LatestSearchData.RoomInstance ri : latestSearchData.getRooms()) {
        /**
         * Sets up a header for each room in our list
         */
        LayoutInflater inflater = LayoutInflater.from(PaxSelectorActivity.this);
        View inflatedHeader = inflater.inflate(R.layout.activity_pax_selector_header, null, false);
        TextView headerText = (TextView) inflatedHeader.findViewById(R.id.pax_selector_header);
        headerText.setText(ri.getType());
        hostingLayout.addView(inflatedHeader);

        for(int i = 0; i < ri.getNumberOfPaxes(); i++) {
            /**
             * Sets up a layout to fill up for each pax
             */
            View inflatedLayout = inflater.inflate(R.layout.activity_pax_selector_single_room, null, false);
            EditText nameEditText = (EditText) inflatedLayout.findViewById(R.id.name);
            EditText surnnameEditText = (EditText) inflatedLayout.findViewById(R.id.surname);
            (...)
            hostingLayout.addView(inflatedLayout);
for(LatestSearchData.RoomInstance ri:LatestSearchData.getRooms()){
/**
*为列表中的每个房间设置标题
*/
LayoutFlater充气机=LayoutFlater.from(PaxSelectorActivity.this);
查看充气头=充气器。充气(R.layout.activity\u pax\u selector\u头,null,false);
TextView标题text=(TextView)充气标题.findViewById(R.id.pax\u选择器\u标题);
headerText.setText(ri.getType());
hostingLayout.addView(充气头);
对于(int i=0;i
我将页眉充气(屏幕截图中写有DOUBLE和SINGLE的页眉)为每个房间,然后为每个乘客设置一个活动\u pax\u选择器\u单人房间行。它工作正常,我可以获得我想要的确切活动。但是……我如何映射插入到我的房间和乘客中的数据?我想链接它们,以便用户点击“下一步”时能够轻松检索它们把合适的乘客放在合适的房间,因为这是一个有价值的信息


我在考虑扩展LinearLayout并创建一个带有RoomInstance参数的自定义视图,然后将RoomInstance传递给布局。但在我看来,这是一个巨大的MVC逻辑中断,我不想这样做。此外,由于房间列表不会太长,而且乘客之间会有任意数量的标题,所以我我认为使用RecyclerView不是一个聪明的主意……或者是吗?

我相信保持每个房间编辑文本引用的唯一方法是创建一个扩展LinearLayout或Relative的自定义视图,并为每个房间创建一个实例,然后在运行时将其添加到布局中。与论坛网站不同,我们不使用“谢谢”或“谢谢”“感谢您的帮助”或签名。请参阅“@Akariuz,这也是我的想法,但我想知道是否有某种适配器可以作为布局和它描述的对象之间的链接。。。