2012-01-03 3 views
3

Android 1.6 Там есть набор таких объектовCustom 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 не генерируется. Элемент управления Spinner пуст. Где моя вина?

Код применения

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 вы используете файл макета . но адаптер не знает, как отображать ваши данные.

Вы должны использовать пользовательский адаптер и создать свой собственный файл макета XML. Прочтите несколько примеров того, как этого добиться. Лучше всего понять, как работают ListViews и адаптеры.

Смотрите следующие ссылки:

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));