1

カスタムドロップダウンで2つのスピナーを使用しようとしていますが、プルダウンするとカスタムレイアウトで表示されるのは一番下のスピナーだけです。自力で原因究明を試みましたが、できません。

public class setup extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.setuplayout);
    Spinner spinner1 = (Spinner) findViewById(R.id.Spinner01);
    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.numberPlayers, R.layout.spinner_item);
    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner1.setAdapter(adapter);
    Spinner spinner2 = (Spinner) findViewById(R.id.Spinner02);
    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,
            R.array.gameDifficulty, R.layout.spinner_item);
    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner2.setAdapter(adapter2);
            }
            }

上記の spinner_item の xml コードです。

<?xml version="1.0" encoding="utf-8"?>
<TextView  
xmlns:android="http://schemas.android.com/apk/res/android"
android:textColor="#F9B12F"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="20sp"
android:gravity="left"  
android:padding="5dip"
android:popupBackground="#000000"
android:background="#000000"
/>

これはsetuplayout xmlです

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
    <ImageView android:id="@+id/mainSetupImage"
        android:src="@drawable/setup"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ImageView>
    <ImageView
        android:id="@+id/players"
        android:clickable="true"
        android:src="@drawable/players"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_centerVertical="true">
    </ImageView>  
    <Spinner
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:drawSelectorOnTop="true"
        android:id="@+id/Spinner01"
        android:textColor="#F9B12F"
        android:layout_toRightOf="@+id/players"
        android:layout_marginLeft="25dp"
        android:layout_centerVertical="true"
        android:background="@drawable/spinner"/>
    <Spinner 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:drawSelectorOnTop="true" 
        android:id="@+id/Spinner02"
        android:textColor="#F9B12F"
        android:layout_below="@+id/Spinner01"
        android:layout_toRightOf="@+id/difficulty"
        android:layout_marginTop="25dp"
        android:background="@drawable/spinner"/>

    <ImageView
        android:id="@+id/difficulty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/Spinner02"
        android:clickable="true"
        android:src="@drawable/difficulty" />       


    </RelativeLayout>
4

3 に答える 3

0

2番目のスピナーでは、アダプター2ではなくアダプターを使用しました。したがって、adapter2 を使用してコードを実行し、実行されることを願っています。:)

于 2013-01-07T05:51:02.183 に答える
0

ArrayAdapter を作成するときに、すべての人のコードをよりクリーンにする小さなコードを共有したいと思います。

好みのクラス (MainActivity など) で静的メソッドを定義するだけで、コードをあまり汚さずに配列アダプターを提供できます。

 public static ArrayAdapter<CharSequence> 
     getArrayAdapter( Context c,  int arrayId, int idLayout1, int idLayout2){
     ArrayAdapter<CharSequence> aa;
     aa = ArrayAdapter.createFromResource( c, arrayId , idLayout1);
     aa.setDropDownViewResource( idLayout2);
     return aa;     
}

次に、コードでそれを行う必要があります。

myspinner.addAdapter(
      this, ThatClass.getArrayAdapter( 
             R.array.myid, R.layout.id1, R.layout.id2 );
myspinner.setOnItemSelectedListener(this);

/* Remember that the default Android Spinner layout can be get passing these specific layout ids:
    android.R.layout.simple_spinner_item as layout1 
    android.R.layout.simple_spinner_dropdown_item as layout2
*/
于 2013-01-08T22:19:18.703 に答える
0

私はあなたの助けを借りてそれを理解しました。カスタムレイアウトをオーバーライドしていたコード「adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)」を使用していました。2 つのコードの相違点を強調していただきありがとうございます。それは大きな助けでした。引用された行を削除したところ、機能するようになりました。

于 2013-01-07T18:48:45.450 に答える