2012-01-03 16 views
3

のAndroid 1.6 ありカスタムArrayAdapterとSpinner。いいえ項目選択ません

public class MyItem { 
public String name = ""; 
public String brief = ""; 
    public int availiableweight = 0; 
public Node xmlpoint = null; 

@Override 
public String toString() 
{ 
    return name; 
} 
public MyItem(String _brief, String _name, Node _xmlpoint) 
{ 
    name = _name; 
    brief = _brief; 
    xmlpoint = _xmlpoint; 
} 
} 

オブジェクトが配列に格納された、このようなオブジェクトのコレクションです:ArrayListのitemsList

アイテムはスピナーのドロップダウンリストに表示されているが、しかし、私は、任意の項目を選択傾けます。イベントOnItemSelectedListenerは生成されません。スピナーコントロールが空です。私の欠点はどこですか?

アプリケーションのコード

public class MyActivity extends Activity { 
/** Called when the activity is first created. */ 

private ArrayList<MyItem> itemsList; 
private Spinner mySpinner; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mySpinner = (Spinner) findViewById(R.id.mySpinner); 

    itemsList = new ArrayList<MyItem>(); 
    ArrayAdapter<MyItem> myAdapter = new ArrayAdapter<MyItem>(this, android.R.layout.simple_spinner_item, itemsList); 
    myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    mySpinner.setAdapter(myAdapter); 

    mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() 
    { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) 
     { 
      // TODO Auto-generated method stub 
      AlertDialog("Pos: " + arg2); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) 
     { 
      // TODO Auto-generated method stub 
     } 
    }); 
    itemsList.add(new MyItem("1","one",null)); 
    itemsList.add(new MyItem("2","two",null)); 
    itemsList.add(new MyItem("3","three",null)); 
} 
} 

レイアウトmain.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 

<LinearLayout 
    android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/languageText" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:text="Language" android:gravity="center_vertical"/> 

    <Spinner 
     android:id="@+id/languageSpinner" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" android:prompt="@string/chooseitem"/> 

</LinearLayout> 

</LinearLayout> 

答えて

4

あなたの問題はこっちです:

ArrayAdapter<MyItem> myAdapter = new ArrayAdapter<MyItem>(this, android.R.layout.simple_spinner_item, itemsList); 

あなたが持っているので、あなたは、一般的なArrayAdapterクラスを使用することはできませんカスタムオブジェクトの配列。 ArrayAdapterのコンストラクタでは、android.R.layout.simple_spinner_itemレイアウトファイルを使用します。アダプターはデータの表示方法を認識していません。

カスタムアダプターを使用して独自のXMLレイアウトファイルを作成する必要があります。 これを実現する方法の例をご覧ください。 ListViewとアダプタの仕組みを理解することをお勧めします。

は、これらのリンクを参照してください。

http://android.vexedlogic.com/2011/04/02/android-lists-listactivity-and-listview-i-basic-usage/

http://android.vexedlogic.com/2011/04/02/android-lists-listactivity-and-listview-ii-%E2%80%93-custom-adapter-and-list-item-view/

彼らは非常に良いリファレンスを提供します。あなたは、あなたの知識を拡大するためにチュートリアルの "Androidリスト"シリーズの次の部分を読んで行くことができます。

これが役に立ちます。あなたがさらに詳しい説明が必要な場合は、必ずコメントを投稿してください。

1

答えはBandreidですが、決定は別です。 ArrayListをアダプタで直接使用しないでください。 このコードは正しく入力しました

myAdapter.add(new MyItem("1","one",null));  
myAdapter.add(new MyItem("2","two",null));  
myAdapter.add(new MyItem("3","three",null)); 
関連する問題