自定义ArrayAdapter和微调器。没有项目选择

问题描述:

的Android 1.6 有自定义ArrayAdapter和微调器。没有项目选择

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> 

你的问题是在这里:

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

你不能因为你必须使用通用的一个ArrayAdapter类自定义对象数组。在ArrayAdapter的构造函数中,使用android.R.layout.simple_spinner_item布局文件。但适配器不知道如何显示数据。

您必须使用自定义适配器并创建自己的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列表”系列教程的下一部分,以扩展您的知识。

希望这会有所帮助。如果您需要进一步解释,请务必发表评论。

感谢Bandreid的回答,但决定是另一回事。 不要直接使用ArrayList,只能通过适配器。 此代码无误

myAdapter.add(new MyItem("1","one",null));  
myAdapter.add(new MyItem("2","two",null));  
myAdapter.add(new MyItem("3","three",null));