2

全部-我的布局如下所示: 在此处输入图像描述

我的目标是在所有行上都有这三个微调器。现在他们只在圣詹姆斯(是的,这是垄断)。每个微调器都有大量的代码,并且从头开始为每一行创建一个全新的微调器充其量是困难的。我试图复制第一行,只更改文本:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <RelativeLayout android:id="@+id/stjameslay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
        android:id="@+id/st_james_place"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/st_james" 
        android:padding="5dp"
        android:textSize="6pt" />

      <Spinner android:id="@+id/owner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true"         
        android:layout_toRightOf="@id/st_james_place" 
        android:layout_alignBaseline="@id/st_james_place" />
     <Spinner android:id="@+id/houses"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true" 
        android:layout_toRightOf="@id/owner"
        android:layout_alignBaseline="@id/st_james_place" />
     <Spinner android:id="@+id/hotels"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true" 
        android:layout_toRightOf="@id/houses"
        android:layout_alignBaseline="@id/st_james_place" />   
    </RelativeLayout>

    <RelativeLayout android:id="@+id/balticavelay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/stjameslay">

        <TextView
        android:id="@+id/st_james_place"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/baltic" 
        android:padding="5dp"
        android:textSize="6pt" />

      <Spinner android:id="@+id/owner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true"         
        android:layout_toRightOf="@id/st_james_place" 
        android:layout_alignBaseline="@id/st_james_place" />
     <Spinner android:id="@+id/houses"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true" 
        android:layout_toRightOf="@id/owner"
        android:layout_alignBaseline="@id/st_james_place" />
     <Spinner android:id="@+id/hotels"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true" 
        android:layout_toRightOf="@id/houses"
        android:layout_alignBaseline="@id/st_james_place" />   
    </RelativeLayout>

    <RelativeLayout android:id="@+id/boardwalklay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/balticavelay">

      <TextView
        android:id="@+id/st_james_place"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/boardwalk" 
        android:padding="5dp"
        android:textSize="6pt" />

      <Spinner android:id="@+id/owner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true"         
        android:layout_toRightOf="@id/st_james_place" 
        android:layout_alignBaseline="@id/st_james_place" />
     <Spinner android:id="@+id/houses"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true" 
        android:layout_toRightOf="@id/owner"
        android:layout_alignBaseline="@id/st_james_place" />
     <Spinner android:id="@+id/hotels"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:drawSelectorOnTop="true" 
        android:layout_toRightOf="@id/houses"
        android:layout_alignBaseline="@id/st_james_place" />   
    </RelativeLayout>           
</RelativeLayout>

从屏幕截图中可以看出,微调器没有出现。我的想法是,由于微调器上的 id 相同,Java 代码只会将额外的微调器视为重复项。有没有办法做到这一点,还是我必须为每一行和新的 Java 代码(owner2、house2、hotels2 等)制作新的微调器?感谢您的时间和精力!

4

3 回答 3

1

在我看来,您实际上需要将其作为ListView. 创建一个“列表项”布局文件来表示单个列表行,例如...

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/propertyLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView android:id="@+id/propertyName"
        ... />
    <Spinner android:id="@+id/owner"
        ... />
    <Spinner android:id="@+id/houses"
        ... />
    <Spinner android:id="@+id/hotels"
        ... />   
</RelativeLayout>

然后,您需要创建一个自定义Adapter来将数据映射/绑定到每个小部件,并将其与ListView.

于 2012-07-06T23:26:06.087 回答
0

我还没有尝试过,但从理论上讲,它应该可以工作。

我会将微调器设置分解为单独的 xml 布局,然后include在 xml 中使用以将其添加到每个父(属性)布局。

然后,您可以通过从其父视图引用它们来设置微调器,即使它们具有相同的 id(很像列表行的工作方式)。

RelativeLayout boardwalk = (RelativeLayout) findViewById(R.id.boardwalklay);
Spinner boardwalkowner = (Spinner) boardwalk.findViewById(R.id.owner)
// set your spinner here
// do the same for the other two spinners
// repeat for each property

如果每个微调器实际上是相同的,但对于父级,创建一个方法来填充它们,并在获得对特定微调器的引用后调用该方法。

然后在onItemSelected抓取中对父级的引用,您可以将其与每个单独的空间相关联。

于 2012-07-06T23:27:40.953 回答
0

您已经在那里回答了您的问题:第二行微调器指的是第一行的 id。如果您希望将它们唯一地放置在 RelativeLayout 中,并且如果您希望在活动代码中查找它们,所有微调器 id 必须是唯一的。

为从@+id/st_james_place 到@+id/textBaltic 的第二行textview 定义一个新id,然后它旁边的微调器现在可以更改为 android:layout_toRightOf="@id/textBaltic" 和 android:layout_alignBaseline="@ id/textBaltic",然后将spinner的id改为@+id/spinnerBalticOwner,下一个spinner可以这样引用:android:layout_toRightOf="@id/spinnerBalticOwner"。

对所有当前行微调器和下一行中的微调器执行此操作,所有微调器都应正确显示。

在循环中初始化微调器:

int[] spinnerIds = new int[] {R.id.owner, R.id.houses, R.id.hotels, R.id.owner2, R.id.houses2, R.id.hotels2, R.id.owner3, R.id.houses3, R.id.hotels3};

for (int i = 0; i < spinnerIds.length; i++) {
   Spinner spinner = (Spinner) findViewById(spinnerIds[i]);
   // standard spinner initialization code
   if (spinner.getTag().equals("owner")) {
     // init spinner based on owner spinner
   } else if (spinner.getTag().equals("houses")) 
     // init spinner based on houses spinner
   } else if (spinner.getTag().equals("hotels")) {
     // init spinner based on hotels spinner
  } 

}

然后在您的布局中,您需要将 'android:tag' 添加到所有微调器,将 tag='owner' 添加到第一列微调器,将 tag='houses' 添加到第二列,将 tag='hotels' 添加到第三列:

  <Spinner android:id="@+id/owner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:tag="owner"
    android:drawSelectorOnTop="true"         
    android:layout_toRightOf="@id/st_james_place" 
    android:layout_alignBaseline="@id/st_james_place" />
 <Spinner android:id="@+id/houses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:tag="houses"
    android:drawSelectorOnTop="true" 
    android:layout_toRightOf="@id/owner"
    android:layout_alignBaseline="@id/st_james_place" />
 <Spinner android:id="@+id/hotels"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:tag="hotels"
    android:drawSelectorOnTop="true" 
    android:layout_toRightOf="@id/houses"
    android:layout_alignBaseline="@id/st_james_place" />   
</RelativeLayout>

为此,所有微调器 id 必须是唯一的,我的示例只是将行号附加到原始 id,例如 R.id.owner(第一行)、R.id.owner2(第二行)、R.id.owner3 (第 3 行)。

于 2012-07-06T23:09:40.450 回答