android:prompt可以设置dialog的标题(注意必须在string资源下引用, 不然程序会崩掉) >
监听函数:setOnItemSelectedListener
获取值函数:getSelectedItem()
* 通过适配器来填充参数
编写myadapter适配器继承baseadapter 关键的getView方法
@Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater=LayoutInflater.from(context); View v=inflater.inflate(R.layout.sp_layout,null); TextView pername=v.findViewById(R.id.pername); TextView perage=v.findViewById(R.id.perage); pername.setText(list.get(position).getName()); perage.setText(list.get(position).getAge()+""); return v; }
主界面:
sp = findViewById(R.id.sp); List pers=new ArrayList(); //准备数据 pers.add(new Person("小红",10)); pers.add(new Person("小明",12)); pers.add(new Person("小军",13)); MyAdapter myAdapter=new MyAdapter(pers,this);//准备适配器 sp.setAdapter(myAdapter);
**2.ListView 列表及adapter适配器**
* Android自带的适配器
private String data[] = {"aa","bb","cc","dd","aa","bb","cc","dd","aa","bb","cc","dd","aa","bb","cc","dd"};//假数据 ListView listView = (ListView) findViewById(R.id.listview);//在视图中找到ListView ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);//新建并配置ArrayAapeter listView.setAdapter(adapter);
* 自定义适配器 继承于baseadapter
@Override public int getCount() {//数据长度 return list.size(); } @Override public Object getItem(int position) { //某一个数据是什么 return list.get(position); } @Override public long getItemId(int position) { //当前的数据索引 return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater=LayoutInflater.from(context); View v=inflater.inflate(R.layout.sp_layout,null); TextView pername=v.findViewById(R.id.pername); TextView perage=v.findViewById(R.id.perage); pername.setText(list.get(position).getName()); perage.setText(list.get(position).getAge()+""); return v; }
适配优化viewholder
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.item, null);
viewHolder.bt1 = (Button) convertView.findViewById(R.id.bt1);
viewHolder.bt2 = (Button) convertView.findViewById(R.id.bt2);
viewHolder.tv = (TextView) convertView.findViewById(R.id.tv);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
//绑定数据
return convertView;
}
Listview 点击事件setOnItemClickListener
及长按事件setOnItemLongClickListener 返回true可以拦截点击事件
* ListView内部按钮点击事件:
<https://blog.csdn.net/zbq1334/article/details/78632454>
在adapter钟实现onclick接口
定义一个InnerItemOnclickListener接口,里面实现itemClick
interface InnerItemOnclickListener { void itemClick(View v); }
private InnerItemOnclickListener mListener;
写一个InnerItem的监听方法
public void setOnInnerItemOnClickListener(InnerItemOnclickListener listener){
this.mListener=listener;
}
在绑定数据的同时给btn添加点击事件
viewHolder.bt1.setOnClickListener(this);
viewHolder.bt2.setOnClickListener(this);
原生的点击事件实现监听
@Override
public void onClick(View v) {
mListener.itemClick(v);
}
在activity界面;
实现 InnerItemOnclickListener接口
mAdapter.setOnInnerItemOnClickListener(this);
public void itemClick(View v) {
int position;
position = (Integer) v.getTag();