Android ListView item裡控制元件的監聽
阿新 • • 發佈:2019-01-23
在進行android開發的時候,我們會經常遇到,需要監聽listview的item的控制元件(如button)的問題,比如點選item的圖片跳轉詳情頁,音樂列表裡的item都有一個播放按鈕,點選這個播放按鈕,播放相應的音訊。以下是個人的解決方法:
首先需要我們自己寫一個介面卡,繼承BaseAdapter類,實現View.OnClickListener介面:
public class ListViewAdapter extends BaseAdapter implements View.OnClickListener {
private List<Audio> ContentList;//需要裝配的資料
private LayoutInflater inflater;
private Callback callback;
public interface Callback{
public void click(View v);
}
public ListViewAdapter(Context context,List<Audio> contentList, Callback callback) {
ContentList = contentList;
this.callback = callback;
inflater=LayoutInflater.from(context);
}
@Override
public void onClick(View v) {
callback.click(v);
}
@Override
public int getCount() {
return ContentList.size();
}
@Override
public Object getItem(int position) {
return ContentList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null){
convertView=inflater.inflate(R.layout.listviewitem_layout,null);//item佈局檔案
holder=new ViewHolder();
holder.home=convertView.findViewById(R.id.userhome);
holder.name=convertView.findViewById(R.id.username);
holder.time=convertView.findViewById(R.id.crt);
holder.button=convertView.findViewById(R.id.url);
convertView.setTag(holder);
}else {
holder=(ViewHolder)convertView.getTag();
}
holder.home.setText(ContentList.get(position).getHome());
holder.name.setText(ContentList.get(position).getName());
holder.time.setText(ContentList.get(position).getDate());
holder.button.setOnClickListener(this);
holder.button.setTag(position);
return convertView;
}
public class ViewHolder{//根據自己的佈局修改
public TextView home,name,time;
public Button button;
}
}
在listview的activity裡,重寫介面卡中的Callback介面的方法
public class Detail_activity extends AppCompatActivity implements ListViewAdapter.Callback {
...
...
@Override
public void click(View v) {//重寫Callback的click方法
Integer position=(Integer)v.getTag();//獲取位置
String url=audioList.get(position).getUrl();//根據位置獲取資料
/*
**在這裡寫實際業務操作**
*/
}
}
本人第一次學android開發,還有很多不懂的地方,只能邊學邊記了。