2

すべて-私は次のようなレイアウトを持っています: ここに画像の説明を入力してください

私の目標は、これら3つのスピナーをすべての列に配置することです。現在、彼らはセントジェームスだけにいます(はい、これは独占です)。各スピナーには大量のコードが含まれており、行ごとにまったく新しいスピナーを最初から作成することは、せいぜい困難です。最初の行を複製して、テキストのみを変更しようとしました。

    <?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など)を作成する必要がありますか?時間と労力をありがとう!

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

あなたはすでにそこであなたの質問に答えました:2番目の行のスピナーは最初の行のIDを参照しています。スピナーIDをRelativeLayoutに一意に配置する場合、およびアクティビティコードで検索する場合は、すべてのスピナーIDが一意である必要があります。

2行目のテキストビューの新しい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
  } 

}

次に、レイアウトで、すべてのスピナーに「android:tag」を追加し、最初の列のスピナーにtag ='owner'を追加し、2番目の列にtag ='houses'を追加し、3番目の列に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行目)。

于 2012-07-06T23:09:40.450 に答える
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 に答える