安卓开发---07 Android列表组件训练_inneritemonclicklistener

25 阅读1分钟

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