废话不多说,上代码
MainActivity.javapackage com.example.dropdownlisttest;import java.util.ArrayList;import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.EditText;
import android.widget.Spinner;public class MainActivity extends Activity {
private Spinner mSpinner ;
private ArrayList<String> cities;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

 mSpinner = (Spinner)findViewById(R.id.spinner);

initSpinner();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

private void initSpinner(){

cities  = new ArrayList<String>();
cities.add("北京");
cities.add("上海");
cities.add("南京");
cities.add("杭州");
cities.add("广州");
cities.add("添加...");

mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
if(position == cities.size() - 1){
AlertDialog.Builder builder = new Builder(MainActivity.this);
builder.setTitle("添加城市");
final EditText city = new EditText(MainActivity.this);
builder.setView(city);
builder.setNegativeButton("添加", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
cities.add(cities.size()-1, city.getText().toString());
dialog.dismiss();
}
});
builder.show();
}
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});

CustomizedAdapter adapter = new CustomizedAdapter(this, R.layout.dropdown_item, cities);
mSpinner.setAdapter(adapter);
}}
CustomizedAdapter.javapackage com.example.dropdownlisttest;import java.util.List;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;public class CustomizedAdapter extends BaseAdapter {
private Context context;
private List<String> mList;
private LayoutInflater inflater;

public CustomizedAdapter(){}

public CustomizedAdapter(Context context, int layout, List<String> list){
this.context = context;
inflater = LayoutInflater.from(context);
this.mList = list;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return mList.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mList.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(null == convertView){
convertView = inflater.inflate(R.layout.dropdown_item, null);
}
TextView textView = (TextView)convertView.findViewById(R.id.textview1);
Button delButton = (Button)convertView.findViewById(R.id.delete);
textView.setText(mList.get(position));

if(position == mList.size() - 1){
//最后一项不允许删除
delButton.setOnClickListener(null);
delButton.setVisibility(View.INVISIBLE);
}else{
delButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mList.remove(position);
notifyDataSetChanged();
}
});
}

return convertView;
}}
代码如上,结果碰上了令我几个问题一直搞不明白
1.Spinner的下拉列表中,在Button上注册了onClickListener之后,发现Item居然不可选了,就是只能点击按钮删除,而点别的地方一点反应都没有,最后一个Item我移除了onClickListener之后,它就是可选的,是否Spinner只能响应一个事件?
2.当我连续删除Item的时候,会莫名其妙的触发添加事件,即莫名其妙的系统会选中最后一项,一直搞不明白为什么。
3.在getView()中,我判断的是position == mList.size()-1,即最后一项,我不显示删除按钮,但是实际运行时,连第一项也没有删除按钮几个问题我百思不解,求大神科普下。