Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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
Java 如何使用一组代码拥有多个微调器_Java_Android_Spinner_Android Relativelayout - Fatal编程技术网

Java 如何使用一组代码拥有多个微调器

Java 如何使用一组代码拥有多个微调器,java,android,spinner,android-relativelayout,Java,Android,Spinner,Android Relativelayout,所有-我的布局如下所示: 我的目标是在所有行上都有这三个微调器。现在他们只在圣詹姆斯岛(是的,这是垄断)。每个微调器都有大量代码,要从头开始为每一行创建一个全新的微调器充其量也很困难。我试图复制第一行,但只更改了文本: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:

所有-我的布局如下所示:

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

    <?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、houses2、hotels2等)?谢谢你的时间和努力

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

为第二行textview定义一个新id,从@+id/st_james_place到@+id/textBaltic,然后它旁边的微调器现在可以更改为android:layout_toRightOf=“@id/textBaltic”和android:layout_alignBaseline=“@id/textBaltic”,然后将微调器的id更改为@+id/spinnerBalticOwner,下一个微调器可以这样引用它: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
  } 
int[]spinnerIds=newint[]{R.id.owner,R.id.houses,R.id.hotels,R.id.owner2,R.id.hotels2,R.id.hotels2,R.id.owner3,R.id.hotels3};
对于(int i=0;i
}

然后在布局中,您需要将“android:tag”添加到所有微调器,将tag='owner'添加到第一列微调器,将tag='house'添加到第二列,将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(第1行)、R.id.owner2(第2行)、R.id.owner3(第3行)。

在我看来,您实际上需要以
列表视图的形式执行此操作。创建“列表项”布局文件以表示单个列表行,例如

<?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>


然后,您需要创建一个自定义的
适配器
来将数据映射/绑定到每个小部件,并将其与
列表视图一起使用
我还没有尝试过这一点,但从理论上讲,它应该可以工作

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

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

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


然后在选择的
获取对父对象的引用,您可以将其关联到每个单独的空间。

这就是我试图避免的,因为我必须为spinnerBalticOwner编写另一组Java代码。只需将它们指向相同的方法即可。据我所知,它们需要单独的ID。无法避免为布局中的每个微调器创建/初始化微调器。除此之外,您如何区分旋转器的结果是从Boardwalk的第三个旋转器到St.James Place的第一个旋转器?但是,您可以使用包含微调器ID和“android:tag”属性的数组来帮助您在循环中初始化微调器,而不是一个接一个地初始化微调器。您可以给我一些带循环的数组的示例代码吗?我将如何使用include in xml?请查看比我的建议更优雅的示例代码+1.
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