Spinner添加/删除数据,求科普

kitencx 2013-06-27 11:54:21
废话不多说,上代码
MainActivity.java

package 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.java

package 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,即最后一项,我不显示删除按钮,但是实际运行时,连第一项也没有删除按钮

几个问题我百思不解,求大神科普下。
...全文
163 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kitencx 2013-06-28
  • 打赏
  • 举报
回复
结贴,自己搞定了。。
kitencx 2013-06-27
  • 打赏
  • 举报
回复
上张图,直观点

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧